[SPRING] 봄의 독서 요구 몸
SPRING봄의 독서 요구 몸
봄에는 다음과 같은 끝 점이있는 컨트롤러가 있습니다.
@RequestMapping(method = RequestMethod.POST)
@ResponseStatus(HttpStatus.CREATED)
@ResponseBody
public OutputStuff createStuff(@RequestBody Stuff stuff) {
//my logic here
}
이 방법으로이 엔드 포인트에서 POST를 수행하면 요청 본문의 JSON이 자동으로 내 모델로 역 직렬화됩니다 (Stuff). 문제는, 방금 들어오는 그대로의 원시 JSON을 로깅하라는 요구 사항이 있습니다! 나는 다른 접근법을 시도했다.
암호:
@RequestMapping(method = RequestMethod.POST)
@ResponseStatus(HttpStatus.CREATED)
@ResponseBody
public OutputStuff createStuff(@RequestBody Stuff stuff, HttpServletRequest req) {
StringBuilder sb = new StringBuilder();
req.getReader().getLines().forEach(line -> {
sb.append(line);
});
//log sb.toString();
//my logic here
}
이 문제는 내가 이것을 실행할 때 독자의 InputStream이 이미 JSON을 desuffialize하여 Stuff으로 변환했음을 의미한다. 따라서 동일한 입력 스트림을 두 번 읽을 수 없으므로 오류가 발생합니다.
코드 (일부) :
public class RawRequestLoggerInterceptor extends HandlerInterceptorAdapter {
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) {
StringBuilder sb = new StringBuilder();
req.getReader().getLines().forEach(line -> {
sb.append(line);
});
//log sb.toString();
return true;
}
}
이 tho의 문제는, 물건에의 직렬화가 일어날 때까지는, Request로부터의 InputStream가 벌써 읽혀 졌을 것입니다. 그래서 나는 다시 예외를 얻을 것이다.
더 나은 해결책이 있습니까, 언급하지 않았거나 알지 못하는 것입니까? 나는 도움을 감사 할 것입니다. SpringBoot의 최신 릴리스를 사용하고 있습니다.
해결법
-
==============================
1.이 게시물에서 참조한대로 : HttpRequest 및 HttpResponse를 파일에 기록하는 방법?, spring은 요청을 기록하는 데 사용할 수있는 AbstractRequestLoggingFilter를 제공합니다.
이 게시물에서 참조한대로 : HttpRequest 및 HttpResponse를 파일에 기록하는 방법?, spring은 요청을 기록하는 데 사용할 수있는 AbstractRequestLoggingFilter를 제공합니다.
AbstractRequestLoggingFilter API 문서 (여기에서 찾을 수 있습니다.)
-
==============================
2.또한 봄에 그렇게하려고했지만 체인에 내 사용자 지정 http 요청을 전달할 수있는 방법을 찾지 못했습니다. 그렇다면 체인에 내 사용자 지정 http 요청을 전달한 전통적인 j2ee 필터를 작성했습니다. http 요청을 두 번 이상 읽을 수 있음
또한 봄에 그렇게하려고했지만 체인에 내 사용자 지정 http 요청을 전달할 수있는 방법을 찾지 못했습니다. 그렇다면 체인에 내 사용자 지정 http 요청을 전달한 전통적인 j2ee 필터를 작성했습니다. http 요청을 두 번 이상 읽을 수 있음
이 예제를 확인하십시오 http://www.myjavarecipes.com/how-to-read-post-request-data-twice-in-spring/
from https://stackoverflow.com/questions/32763922/spring-reading-request-body-twice by cc-by-sa and MIT license
'SPRING' 카테고리의 다른 글
[SPRING] 스프링 부트 2로 업그레이드 한 후 ObjectMapper가 기본 생성자없이 역 직렬화 할 수 없습니다. (0) | 2019.05.21 |
---|---|
[SPRING] POST 요청에 잘못된 CSRF 토큰이 있습니다. (0) | 2019.05.21 |
[SPRING] Io 예외 : Oracle Cloud에서 Oracle 오류 ORA-12650 (0) | 2019.05.21 |
[SPRING] 별도의 jar에있는 스프링 MVC 정적 리소스 (0) | 2019.05.21 |
[SPRING] Condition / ConfigurationCondition 인터페이스를 구현하는 클래스에서 @Value 또는 Environment를 작동시키는 방법 (0) | 2019.05.21 |