2017-04-26 5 views
0

私はいくつかの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を取得する方法はありますか?

編集:ここでは動作を示し、完全なアプリがあります:

Download example

答えて

0

ログは、それはあなたのサーバー側の実装の問題ではありません言うから。

{ 
    myPropert: myvalue 
} 

するメッセージコンバータが期待されています:いいえ、それは正常に動作しています

{ 
    "myPropert": "myvalue" 
} 
+0

JSONが適切にフォーマットされますが、このようなJSON本体を掲載されたログから、私はそれを解釈します。基本的に私は{"junk": "value"}のように置いています。それは出力に表示されますが、ボディがヌルか何かのように失敗します – MichaelB

+0

'@ControllerAdvice'に' @ExceptionHandler'を追加しようとしましたか? http://stackoverflow.com/questions/43635137/spring-boot-edit-json-exception-with-data-from-server-response/43636028#43636028 –

+0

はい、ただし、ExceptionHandlerでは、HttpRequestServletを取得するように指示しますが、 getInputStreamまたはgetReaderを呼び出すことはできません。 springframeworkがgetInputStreamを実行しているようですので、ここに来るとストリームは既に閉じられています。 – MichaelB

関連する問題