Spring : @ResponseBody

cad·2022년 4월 8일
0

Spring

목록 보기
13/15

Controller에서 메소드에 @ResponseBody 어노테이션이 붙어 있다면 정해진 경로의 View가 아닌 HTTP Response Body 에 직접 쓰여지게 된다.

이때 리턴되는 데이터 타입에 따라 MessageConverter에서 변환이 이뤄진 후 쓰여진다.

🌟 MappingJacksonHttpMessageConverter

Jackson's ObjectMapper 를 사용하여 request, response 를 JSON 으로 변환할때 사용되는 MessageConverter 이다. applicaton/json 을 지원한다.

매번 메소드마다 @ResponseBody를 붙이기는 비효율적이니 @ResponseBody가 등록된 @RestController를 클래스 어노테이션에 추가해서 전체를 한번에 설정해줄 수 있다.

예제 코드

@Controller
@RequestMapping("/user")
public class UserController {

	@RequestMapping( value="/json/{id}", method = RequestMethod.GET)
	@ResponseBody	
	public UserModel getByIdInJSON( @PathVariable String id){
		UserModel user = new UserModel();
		user.setId( id);
		user.setName( "ellie");
		return user;
	}

	@RequestMapping( value="/html/{id}", method = RequestMethod.GET)
	public String getByIdInHTML( @PathVariable String id, ModelMap model){
		UserModel user = new UserModel();
		user.setId( id);
		user.setName( "ellie");
		model.addAttribute( "user", user);
		
		return "user";

	}

}

@ResponseBody 가 있는 getByIdInJSON 메소드

리턴값이 UserModel 객체가 MessageConvert 로 설정된 MappingJacksonHttpMessageConverter 에서 JSON 으로 변환 작업 진행

@ResponseBody 가 없는 getByIdInHTML 메소드

ViewResolver 에 의해 선택된 /WEB-INF/jsp/user.jsp 에서 처리 진행


출처
김영한 스프링
https://ismydream.tistory.com/140

profile
Dare mighty things!

0개의 댓글