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/
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
공통헤더와 요청 헤더의 차이인것 같습니다. 정확하진 않지만 제가 이해한것은 headers는 공통헤더이기 때문에
그중에 content-type="text/plain"인걸 찾으려고 하는것이고, produces 는 accept헤더를 찾기때문에 content-type 등을 안적어도 되는거라고 이해했습니다.
'웹 > SPRING' 카테고리의 다른 글
Spring/EgovFrameWork(전자정부프레임워크) - 웹소켓 메신저 채팅 구현 (2) | 2022.12.06 |
---|---|
Spring + mybatis xml 파일 변경시 서버 재시작 없이 반영 (RefreshableSqlSessionFactoryBean) (0) | 2022.12.05 |