일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 |
- Next.js
- Spring
- map
- 스크롤이벤트
- react
- interface
- supabase auth
- supabase authentication
- Filter
- 글또10기
- TS
- extends
- array
- 슬라이딩윈도우
- 페이지네이션
- 안드로이드빌드에러
- javascript
- 글또10기x코드트리
- set
- reactnative
- 타입스크립트
- 배열중복요소제거
- async
- 상속
- supabase 페이지네이션
- app.post
- 이진탐색
- meatadata
- xlsx-js-style
- generic
- Today
- Total
rhanziy
ResponseEntity객체와 @ResponseBody 본문
@ResponseBody
@ResponseBody 는 핸들러 메소드에 붙일 수 있는 어노테이션으로 컨트롤러가 데이터를 반환할 때
HttpMessageConverter 를 사용해서 자바 객체를 응답 본문(body) 메시지를 만들어 반환할 수 있게 도와준다.
@RestController를 사용하면 자동으로 모든 핸들러 메소드에 @ResponseBody가 적용된다..
@Controller
public class AccountController {
@GetMapping("/accounts/{id}")
@ResponseBody
public Account handle(@PathVariable long id) {
// ...
}
}
@RestController
public class AccountController {
@GetMapping("/accounts/{id}")
public Account handle(@PathVariable long id) {
// ...
}
}
- 단점으로는 HTTP 규격 구성 요소 중 하나인 Header에 대해서 유연하게 설정 못함
- 또한 Status도 메서드 밖에서 어노테이션을 사용하여 따로 설정을 해주어야한다는 점도 있다
@ResponseEntity
@ResponseEntity는 반환값에 상태코드와 응답메세지를 전달하는 등 좀 더 세밀한 제어가 필요한 경우 사용한다.
@RestController
@RequestMapping("/api/refnews")
public class RefNewsApi {
@PostMapping
public ResponseEntity<News> createNews(@Valid @RequestBody News news,
BindingResult bindingResult) {
if (bindingResult.hasErrors()) {
return ResponseEntity.badRequest().build();
}
return ResponseEntity.ok(news);
}
}
※ ResponseEntity를 사용할 때는 생성자 대신 빌더를 사용하자
ResponseEntity 사용 시 생성자를 사용하면 HTTP 상태 코드를 하드 코딩으로 지정할 수 있기 때문에
잘못된 상태 코드를 넣을 수 있다. 물론 HttpStatus에 없는 코드를 넣게 되면 에러가 발생하긴 하지만 컴파일 타임이 아닌
런타임에 발생하기 때문에 좋지 않다. 따라서, ResponseEntity 에 있는 빌더를 사용하면 이를 방지하고 가독성도 좋은 코드를 얻을 수 있다.
* 생성자 사용
// OK인 200을 2000으로 오타 -> 런타임 에러
return new ResponseEntity<GameResponse>(gameResponse, headers, HttpStatus.valueOf(2000));
* 빌더 사용
return ResponseEntity.ok()
.headers(headers)
.body(gameResponse);
두 가지 모두 경우 http response 메시지의 body에 데이터를 첨부한다는 점은 동일하지만, ResponseEntity의 경우 http response 메시지의 header와 status(상태 코드)를 조작할 수 있다는 차이점이 있다.
@ResponseBody의 경우 파라미터로 객체를 받아 header를 변경하고,
@ResponseEntity의 경우 클래스 객체를 생성 후 객체에서 header 값을 변경한다.
'Java' 카테고리의 다른 글
Java - map의 개념과 hash table 동작원리 (0) | 2023.07.20 |
---|---|
이클립스 단축키 (0) | 2023.07.10 |
Spring - @ModelAttribute (feat. @RequestParam) (0) | 2023.05.26 |
SQL - 페이징 기능 구현 쿼리 (0) | 2023.04.27 |
Spring - 계층 구조 (0) | 2023.04.25 |