Language/Java
[java] @Controller에서 데이터를 반환하는 방법 / @ResponseBody, ResponseEntity<>
trueman
2022. 4. 14. 15:41
728x90
728x90
일반적인 @Controller에서 View 반환
@Controller에서 View뿐만 아니라 데이터(JSON이나 XML)를 반환시킬 수도 있다.
@Controller에서 데이터를 반환시키는 방법에는 @Responsebody와 ResponseEntity<>가 있다.
@ResponseBody
@ResponseBody : @Controller에서 JSON이나 XML같은 데이터를 반환
@ResponseBody를 사용한 메소드에서 리턴되는 값은 MessageConverter에서 변환되어 HTTP Response Body에 쓰여진다. MessageConverter에는 다양한 종류가 있는데 메소드에서 리턴되는 데이터 타입에 따라 MessageConverter가 결정된다.
1) 반환을 VO객체로 한 예제
@GetMapping("/example")
@ResponseBody
public SampleDTO example() {
SampleDTO dto = new SampleDTO();
dto.setAge(24);
dto.setName("mangdo");
return dto; //스프링이 자동으로 JSON타입으로 객체를 반환해서 전달한다.
}
2) 반환을 Map으로 한 예제
@GetMapping("/example")
@ResponseBody
public Map<String, Object> example() {
Map<String, Object> map = new HashMap<String, Object>();
map.put("age", 24);
map.put("name", "mangdo");
return map; //스프링이 자동으로 JSON타입으로 반환해서 전달한다.
}
ResponseEntity<>
ResponseEntity<> : HTTP 헤더에 Content-Type : json을 명시하면서 다른 작업도 해주고 싶을때
Spring 어노테이션이 아닌 직접 HTTP 헤더를 다루는 경우이다.
@ResponseBody보다 번거롭지만 보다 추가적인 작업을 할 수 있다.
데이터타입을 JSON으로 사용했다는 것을 알려주려면 HTTP 헤더에 contents-type을 명시해야한다
@GetMapping("/example")
public ResponseEntity<String> example(){
// msg = {"name" : "홍길동"}
String msg = "{ \" name \": \" 홍길동 \" }";
HttpHeaders header = new HttpHeaders();
header.add("Content-Type", "application/json; charset=UTF-8");
return new ResponseEntity<>(msg,header,HttpStatus.OK);
}
728x90
728x90