스프링 1-7. Response
1. 개요
스프링에선 응답을 내려주는 방법이 많다.
2. 사용법
2-1. html 반환
@Controller
public class PageController {
@RequestMapping("/main")
public String main() {
return "main.html";
}
}
src/resources/static
static 안에 main.html을 만들면 http://localhost:8080/main 으로 접속할 때, main.html 화면이 나온다.
html이 아닌, Json 데이터를 반환하려면 ResponseEntity
2-2. json 반환용 dto
@JsonNaming(value = PropertyNamingStrategy.SnakeCaseStrategy.class)
@JsonInclude(JsonInclude.Include.NON_NULL)
public class User {
private String name;
private Integer age;
private String phoneNumber;
private String address;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Integer getAge() {
return age;
}
public void setAge(Integer age) {
this.age = age;
}
public String getPhoneNumber() {
return phoneNumber;
}
public void setPhoneNumber(String phoneNumber) {
this.phoneNumber = phoneNumber;
}
public String getAddress() {
return address;
}
public void setAddress(String address) {
this.address = address;
}
@Override
public String toString() {
return "User{" +
"name='" + name + '\'' +
", age=" + age +
", phoneNumber='" + phoneNumber + '\'' +
", address='" + address + '\'' +
'}';
}
}
@JsonNaming 은 저번에 봤던 것처럼 스네이크 케이스를 처리하는 어노테이션이다.
@JsonInclue()는 반환값을 조절할 수 있다.
위의 코드처럼 JsonInclude.Include.NON_NULL 이면 반환값 중, Null인 데이터는 표시되지 않는다.
만약 저게 없으면 반환값에 값이 없으면 Null이라고 반환된다.
그리고 age 부분은 int가 아닌 Integer로 되어 있는데 int로 하면 값을 지정하지 않았을 때 0이 return된다.
Integer로 선언해야 Null이 return되어서 값의 유무를 알 수 있다.
2-3. return Json
@Controller
public class PageController {
@RequestMapping("/main")
public String main() {
return "main.html";
}
@ResponseBody
@GetMapping("/user")
public User user() {
var user = new User();
user.setName("steve");
user.setAddress("유타");
return user;
}
}
@ResponseBody 어노테이션으로 http://localhost:8080/user 로 들어오면
{
"name": "steve",
"address": "�좏�"
}
라는 json데이터가 반환된다.
utf-8이라 한글이 깨지긴 한다. 조만간에 해결방법도 올림
만약 dto의 User에서 @JsonInclude(JsonInclude.Include.NON_NULL)이 없다면 Json 데이터에
age와 phoneNumber 도 Null로 나온다.
중요한 부분은 html이 아닌 Json을 받는 방법이고,
RestApi를 많이 사용하니 @RestController를 붙이면 굳이 @ResponseBody라는 어노테이션을 사용하지
않아도 return하는 객체에 대한 Json 데이터를 만들어서 반환할 수 있다.