개념
Spring에서는 응답을 내려주는 다양한 방법들이 존재
요청을 받아야 응답을 내려줄 수 있기 때문에 controller 작성
@RestController
@RequestMapping("/api")
public class ApiController { ... }
dto 작성
package com.example.response.dto;
import com.fasterxml.jackson.annotation.JsonInclude;
import com.fasterxml.jackson.databind.PropertyNamingStrategy;
import com.fasterxml.jackson.databind.annotation.JsonNaming;
@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(int 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 + '\'' +
'}';
}
}
@GetMapping으로 넘어온 쿼리 파라미터의 값을 리턴
@GetMapping("/text")
public String text(@RequestParam String account) {
return account;
}
Response의 Content-Type 확인
@PostMapping이므로 @RequestBody 있어야 함
Response는 거의 항상 200 OK Response
동작 방식 : Request -> Object Manager -> Object -> Method -> Object Manager -> Json -> Response
@PostMapping("/json")
public User json(@RequestBody User user) {
return user;
}
Response의 Content-Type 확인
Response 내려줄 때 HttpStatus 정해줄 수 있음 -> ResponseEntity 객체 사용
ResponseEntity에 제네릭 타입으로 dto 클래스 작성
body(user) 부분 - Object Mapper를 통해 Json으로 바뀜
응답에 대한 Customizing 필요할 때 ResponseEntity 사용
@PutMapping("/put")
public ResponseEntity<User> put(@RequestBody User user){
return ResponseEntity.status(HttpStatus.CREATED).body(user);
}
Response의 Http Status Code 확인
클래스 작성
@Controller // html 리소스를 찾는 annotation
public class PageController { }
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
Main Page Spring Boot
</body>
</html>
PageController
@Controller : String 리턴하면 html 리소스를 찾고 해당 리소스를 응답으로 내려줌
@ResponseBody : Response Body를 만들어서 응답 내려줌
primitive int 타입의 디폴트 값은 0
null로 리턴받고 싶으면 Integer(Wrapper 타입)로 변수 선언 해야함
null 값 포함하지 않으려면 해당 dto 클래스에 @JsonInclude(JsonInclude.Include.NON_NULL) 작성
@RequestMapping("/main")
public String main() {
return "main.html";
}
@ResponseBody
@GetMapping("/user")
public User user() {
var user = new User(); // 타입 추론
user.setName("steve");
user.setAddress("패스트 캠퍼스");
user.setPhoneNumber("010-1111-2222");
user.setAge(10);
return user;
}
Response의 Content-Type 확인
동작 확인
String | 일반 Text Type 응답 |
Object | 자동으로 Json 변환되어 상태값은 항상 200 OK |
ResponseEntity | Body의 내용을 Object로 설정, 상황에 따라 Http Status Code 설정 |
@ResponseBody | RestController가 아닌 곳(@Controller)에서 Json 응답을 내릴 때 |