솔적솔적

스프렝 웹 개발 - API @ResponseBody 본문

Back-end/Spring Boot

스프렝 웹 개발 - API @ResponseBody

카드값줘체리 2022. 1. 25. 04:07

HelloController 안에 

@GetMapping("hello-string")
	@ResponseBody
	public String helloString(@RequestParam("name") String name) {
		return "hello" +name; 
	}

| @ResponseBody 의미

- @ResponseBody → 이것의 의미는 html에 나오는 body태그가 아니라,

   http에서 header부와 body가 있는데 body부의 내용을 직접내가 넣어주겠다라는 것이다. 

 

 

위의 코드 중 return 코드 해석

public String helloString(@RequestParam("name") String name) {
	return "hello" +name;

- 내가 만약 spring이라고 name 값을 넣으면 hello spring" 이라고 바뀐다.

 

| 템플릿 엔진 vs @ResponseBody 차이

전 시간에는 템플릿 엔진을 사용해서 웹브라우저에 넘겼는데, 이 @ResponseBody랑은 무슨 차이가 있는걸까?

템플릿엔진 @ResponseBody
뷰가 있는 상황에서 조작하는 방식 return에 있는 것을 그대로 내려준다.

 

| @ResponseBody라고 선언한 코드 안에 객체가 있는 경우

	@GetMapping("hello-api")
	 @ResponseBody
	 public Hello helloApi(@RequestParam("name") String name) {
		Hello hello = new Hello();
		hello.setName(name);
		return hello;
	 }
	
	 static class Hello {
	 private String name;
	 	public String getName() {
	 		return name;
	 }
	 	public void setName(String name) {
	 		this.name = name;
	 }
	 	
	 	//getter, setter를 위에서해주면 이런 매서드에 의해서 접근을 할 수 있다. 프로퍼티 접근방식임 
	 }}

 

@ResponseBody 사용원리

  1. 똑같이 내장 톰켓 서버가 스프링에 던진다.
  2. 스프링은 확인을 하다 어, @ResponseBody 란 것을 확인하고 그냥 이 데이터를 넘겨야겠다. http에, 근데 우리 쓴 거 보면 문자가 아닌 객체다.
  3. 문자인 경우엔 기존에 http응답에 바로 넣어서 주고 끝 근데 객체를 준다?
  4. 스프링입장에서는 객체? 객체가 오면 기본 default가 그냥 joson방식으로 만들어서http에 반환하겠다라고 정했다.
  5. 객체를 보고(기존엔 뷰리졸버가 동작을 했지만)
  6. 조건 2 - 단순 문자면 StringConverter라는게 동작, 객체면 JsonConverter가 작동한다.
  7. 조건 1 - HttpMessageConverter이란 얘가 동작을 한다.
  8. 이 Json스타일로 바꾼 것을 나를 요청한 웹브라우저한테 응답해준다.
  • HTTP 의 BODY에 직접 문자내용을 반환한다.
  • ViewResolver 대신 HttpMessageContverter가 동작한다.
  • 기본 문자처리 : StringHttpMessageConverter 가 동작
  • 기본 객체처리 : MappingJackson2HttpMessageContverter 가 동작Spring은 기본적으로 이것을 사용 jackson이란 라이브러리로 제이슨을 바꿈.
  • 어? jackson? 유명한 라이브러리 중 하나Jackson이란 라이브러리가 있다.

 

 

[참조자료] 인프런 스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술 v2021