SPRING - @RequestMapping 의 Produces,Headers 속성

2019. 9. 10. 12:28웹/SPRING

ErrorPage를 만들기 위해 

	@RequestMapping(produces = {"text/html"})
	public ModelAndView error(HttpServletRequest request, HttpServletResponse response) {
	}

윗 부분 작업을 하다가 형식이 text/html로 되어있는걸 맵핑하는건 알겠는데 문득 produces가 정확하게 어떤건지, headers와는 어떤차이가 있는지 알아둬야할 필요성이 있다고 생각했습니다.

 

토비의 스프링을 찾아보니

 

엘리먼트 요청 조건 지원버젼
headers HTTP 헤더 3.0,3.1
PRODUCES Accept헤더 3.1

 

이후 설명에  

Accept 헤더는 headers 대신 produces 엘리먼트를 이용해 조건을 지정할 수 있다. 라고 되어있는걸 확인했습니다.

저 headers 대신 이라는 의미는, headers와 같은 동작을 한다고 봐도 무방하다고 인지했고,

headers와 produces가 각각 어떻게 동작하는지 확인해보겠습니다.

 

https://springframework.guru/spring-requestmapping-annotation/

 

Using the Spring @RequestMapping Annotation - Spring Framework Guru

In this post, I show you how to use the Spring MVC @RequestMapping annotation to configure how Spring MVC maps web requests to controller methods.

springframework.guru

 

Produces

  @RequestMapping(value = "/prod", produces = {"application/JSON"})
  @ResponseBody
  String getProduces(){
    return "Produces attribute";
  }

Headers

@RestController  
@RequestMapping("/home")
public class IndexController {
  @RequestMapping(value = "/head", headers = {"content-type=text/plain"})
  String post(){  
    return "Mapping applied along with headers";  
  }                
}

 

위와 같이 content-type을 적느냐 안적느냐의 차이가 있는것 같습니다.

 

왜 이런 현상이 발생하는지에 대해서는 accept 헤더와 http 헤더가 무엇인지 알아야 할것같은데 한번 찾아보겠습니다.

 

https://www.zerocho.com/category/HTTP/post/5b3ba2d0b3dabd001b53b9db

 

(HTTP) 알아둬야 할 HTTP 공통 & 요청 헤더

안녕하세요. 이번 시간에는 유명한 헤더들에 대해서 알아보겠습니다. 헤더 종류가 너무 많기 때문에 공통 헤더와 요청에서 사용되는 헤더를 먼저 알아봅니다. 잠깐 복습을 해볼까요? 서버의 역할이 클라이언트로부터 요청을 받아서 응답을 보내는 것이라고 했죠. 요청과 응답은 메시

www.zerocho.com

 

공통헤더와 요청 헤더의 차이인것 같습니다. 정확하진 않지만 제가 이해한것은 headers는 공통헤더이기 때문에

그중에 content-type="text/plain"인걸 찾으려고 하는것이고, produces 는 accept헤더를 찾기때문에 content-type 등을 안적어도 되는거라고 이해했습니다.

 

반응형