2

Javascript UI からの JSON オブジェクトをデシリアライズしようとしていますが、400 - 「クライアントから送信されたリクエストは構文的に正しくありません」というエラーが表示され続けます。JSONをハードコーディングすればRESTサービスが正常に機能することはわかっていますが、実際のJSオブジェクトからJSONを生成しようとしています。

Spring はこれに役立つログ メッセージを生成しますか? もしそうなら、どうすればこれを設定できますか?

4

1 に答える 1

6

独自のロギング フィルタを処理チェーンに追加できます。たとえば、次のように指定するだけで、スプリング ブートを使用できます。

import javax.servlet.Filter;
...

@Configuration / @SpringBootApplication
class Something {

    @Bean
    public Filter loggingFilter(){
        return new AbstractRequestLoggingFilter() {
            private final Logger log = LoggerFactory
                    .getLogger(Something.class);

            {
                setIncludeClientInfo(true);
                setIncludeQueryString(true);
                setIncludePayload(true);
            }

            @Override
            protected void beforeRequest(HttpServletRequest request, String message) {
                // not needed
            }

            @Override
            protected void afterRequest(HttpServletRequest request, String message) {
                log.info(message);
            }
        };
    }

結果は次のようになります

{timestamp and such} : After request [uri=/v1/thing/1007?null;client=127.0.0.1;payload=  {
    "name": "test7"
  ]

   {
        "name": "test7"

奇形体であること。これは、http メソッド (POST、GET、..)、リクエストにかかった時間、応答などの有用な情報が省略されているため、最も優れたフィルターではありません。あなたのニーズに合ったより良いものを書いてください。特に、リクエストContentCachingRequestWrapperContentCachingResponseWrapperレスポンスのコピーを非常に簡単に取得できるためです。

サーブレット フィルターに加えて、https://stackoverflow.com/a/28022330 などを追加することもできますHandlerInterceptor- SpringMVC 固有の詳細にアクセスできますが、それらを消費せずに要求と応答のコンテンツにアクセスすることはできません ( https://stackoverflow. com/a/2171633 )

于 2015-11-17T20:22:52.480 に答える