私はいくつかのJSONを受け入れているアプリを持っています。それは@RestControllerとコントローラを持っており、その中SpringBootキャプチャ要求のエラー
@RequestMapping(value="/junk", method=RequestMethod.POST, consumes=MediaType.APPLICATION_JSON_VALUE)
public MyResponse postInfo(@RequestBody MyRequest info) {
...
}
この「作品」には、「MyRequest」オブジェクトごととして有効であり、それを扱うJSONを受け入れます。私は、JSONが有効でない時代を取り込むことに興味があります。不良データが春がありますときに何が起こるかを現在
はstdoutにこのような何かを書くようだ:
2017-04-26 13:57:40.621 WARN 13537 --- [pr-8080-exec-13] .w.s.m.s.DefaultHandlerExceptionResolver : Failed to read HTTP message: org.springframework.http.converter.HttpMessageNotReadableException: Could not read document: Unexpected character ('}' (code 125)): was expecting double-quote to start field name
at [Source: [email protected]; line: 1, column: 1048800]
at [Source: [email protected]; line: 1, column: 1048796] (through reference chain: com.junk.ProcessInfo["process_list"]->java.util.ArrayList[4692]); nested exception is com.fasterxml.jackson.databind.JsonMappingException: Unexpected character ('}' (code 125)): was expecting double-quote to start field name
at [Source: [email protected]; line: 1, column: 1048800]
at [Source: [email protected]; line: 1, column: 1048796] (through reference chain: com.junk.ProcessInfo["process_list"]->java.util.ArrayList[4692])
これはすべてが順調と良いですが、私は、要求がそれは私悪かった何であったか見てみたいですソース側で修正することができます。
私はすべての要求(だけでなく、エラー)のリクエストボディを書き出すようだが、私はこれを使用する場合、そのような要求を変更しているようだ@ControllerAdvice(annotations = RestController.class)
public class ControllerAdvisor {
private static final Logger logger = LogManager.getLogger();
@ModelAttribute
public void logBody(HttpServletRequest request, HttpServletResponse response, @RequestBody String requestString) {
logger.trace("requestString" + requestString);
}
}
のように「ControllerAdvisor」を書いて遊んでいた
ことは、実際のコントローラは、私はまた、アクチュエータで遊んでいたが、Actuator.traceは実際に私の体を与えるものではありません
2017-04-26 14:28:31.432 WARN 523 --- [io-8081-exec-29] .w.s.m.s.DefaultHandlerExceptionResolver : Failed to read HTTP message: org.springframework.http.converter.HttpMessageNotReadableException: Required request body is missing: public com.junk.MyResponse com.junk.ProcessController.postInfo(com.junk.MyRequest)
で失敗します。
RestController内で実際のrequestBodyを取得する方法はありますか?
編集:ここでは動作を示し、完全なアプリがあります:
JSONが適切にフォーマットされますが、このようなJSON本体を掲載されたログから、私はそれを解釈します。基本的に私は{"junk": "value"}のように置いています。それは出力に表示されますが、ボディがヌルか何かのように失敗します – MichaelB
'@ControllerAdvice'に' @ExceptionHandler'を追加しようとしましたか? http://stackoverflow.com/questions/43635137/spring-boot-edit-json-exception-with-data-from-server-response/43636028#43636028 –
はい、ただし、ExceptionHandlerでは、HttpRequestServletを取得するように指示しますが、 getInputStreamまたはgetReaderを呼び出すことはできません。 springframeworkがgetInputStreamを実行しているようですので、ここに来るとストリームは既に閉じられています。 – MichaelB