Spring/Spring Boot
[Spring Boot] 응답(response) 만들기!
jinsang-2
2025. 4. 29. 23:55
응답 만들기 4가지
- String : 일반 Text Type 응답
- Object : 자동으로 Json 변환되어 응답, 상태 값은 항상 200 OK
- ResponseEntity : Body의 내용을 Object로 설정, 상황에 따라 HttpStatus Code 설정
- @ResponseBody : RestController가 아닌곳(Controller)에서 Json 응답을 내릴 때
Object 객체 응답
DTO
@Data
@AllArgsConstructor
@NoArgsConstructor
@JsonNaming(PropertyNamingStrategies.SnakeCaseStrategy.class)
public class UserRequest {
private String userName;
private Integer UserAge;
private String email;
private Boolean isKorean ;
}
ResponseApiController
@RestController
@RequestMapping("/api/v1")
public class ResponseApiController {
@GetMapping("")
public UserRequest user(){
var user = new UserRequest();
user.setUserName("홍길동");
user.setUserAge(10);
user.setEmail("HONG@GMAIL.COM");
return user;
}
}
/* 응답 결과
dto에서 JsonNaming 을 제거한다면 camelCase로 응답이 올것이다.
{
"user_name": "홍길동",
"email": "HONG@GMAIL.COM",
"is_korean": null,
"user_age": 10
}
*/
String 응답
- 반환형 String
- 반환값을 toString()
- plain text 값으로 UserRequest(userName=홍길동, UserAge=10, email=HONG@GMAIL.COM, isKorean=null) 응답
@Slf4j
@RestController
@RequestMapping("/api/v1")
public class ResponseApiController {
@GetMapping("")
public String user(){
var user = new UserRequest();
user.setUserName("홍길동");
user.setUserAge(10);
user.setEmail("HONG@GMAIL.COM");
log.info("user:{}",user);
return user.toString();
}
}
ResponseEntity custom한 응답 내리기!
@Slf4j
@RestController
@RequestMapping("/api/v1")
public class ResponseApiController {
@GetMapping("")
public ResponseEntity<UserRequest> user(){
var user = new UserRequest();
user.setUserName("홍길동");
user.setUserAge(10);
user.setEmail("HONG@GMAIL.COM");
log.info("user:{}",user);
var response = ResponseEntity
.status(HttpStatus.NOT_FOUND)
.header("x-custom","h1")
.body(user);
return response;
}
}
커스텀 status 조정
- .status(HttpStatus.NOT_FOUND)
- 404 Not Found status가 뜬다.
- .header("x-custom","h1")
- 헤더에 key, value 형태로 커스텀하게 들어감
@Controller 와 @RestController
- @Controller 는 Spring 때부터 사용
- html 응답을 사용할 때 사용
- 옛날에는 Controller만 있었는데 지금은 RestController랑 갈라짐
- @RestController
- JSON 응답할 때 사용
@GetMapping , @RequestMapping(path = "", method = RequestMethod.GET)
@GetMapping("")
// 위에와 아래는 같은 기능의 코
@RequestMapping(path = "", method = RequestMethod.GET)
- @RequestMapping(path = "") 만 한다면 모든 REST 요청 받을 수 있음. 사용 X
@Controller 사용시
@Slf4j
@Controller
@RequestMapping("/api/v1")
public class ResponseApiController {
@GetMapping("")
@ResponseBody // @Controller 일 때 json으로 응답
public UserRequest user(){
var user = new UserRequest();
user.setUserName("홍길동");
user.setUserAge(10);
user.setEmail("HONG@GMAIL.COM");
log.info("user:{}",user);
var response = ResponseEntity
.status(HttpStatus.NOT_FOUND)
.header("x-custom","h1")
.body(user);
return user;
}
}
- @Controller 사용시에 @ResponseBody를 넣어주지 않고 user를 그냥 return 해준다면 html 형식으로 응답 받아야 하는 Controller이기에 404 NOT Found가 뜬다.
- 그래서 json 형식으로 응답해 줄 수 있는 @ResponseBody 어노테이션을 넣어줘야 한다.