web developer

[java] @Controller에서 데이터를 반환하는 방법 / @ResponseBody, ResponseEntity<> 본문

Language/Java

[java] @Controller에서 데이터를 반환하는 방법 / @ResponseBody, ResponseEntity<>

trueman 2022. 4. 14. 15:41
728x90
728x90

일반적인 @Controller에서 View 반환


@Controller에서 View뿐만 아니라 데이터(JSON이나 XML)를 반환시킬 수도 있다.

@Controller에서 데이터를 반환시키는 방법에는 @Responsebody와 ResponseEntity<>가 있다.

View를 반환하는 Controller


@ResponseBody


@ResponseBody : @Controller에서 JSON이나 XML같은 데이터를 반환

 

data를 반환하는 Controller

@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);
}

https://doing7.tistory.com/11

728x90
728x90