4
は私がリクエストのアップロード中にクライアントの中断を処理するにはどうすればよいですか?
$ nc 192.168.56.1 8080
POST /echo HTTP/1.1
Host: 192.168.56.1:8080
Content-Type: application/json
Content-Length: 42
^C
はその後、サーバーが400で応答しようとしたヘッダを送信した後、接続を中止した場合Spring Initializrテンプレート
@SpringBootApplication
public class DemoApplication {
public static void main(String[] args) {
SpringApplication.run(DemoApplication.class, args);
}
public static class Payload {
public String field1;
public String field2;
}
@RestController
public static class MyController {
@RequestMapping("/echo")
public ResponseEntity<Payload> echo(@RequestBody Payload payload) {
return new ResponseEntity<>(payload, HttpStatus.OK);
}
}
}
に基づいて、次のアプリケーションを考えると、次は
に記録されます2016-05-03 16:56:28.916 WARN 5776 --- [nio-8080-exec-2] .w.s.m.s.DefaultHandlerExceptionResolver : Failed to read HTTP message: org.springframework.http.converter.HttpMessageNotReadableException: Could not read document: Unexpected EOF read on the socket; nested exception is java.io.EOFException: Unexpected EOF read on the socket
2016-05-03 16:56:28.997 ERROR 5776 --- [nio-8080-exec-2] o.a.c.c.C.[Tomcat].[localhost] : Exception Processing ErrorPage[errorCode=0, location=/error] org.apache.catalina.connector.ClientAbortException: java.io.IOException: An established connection was aborted by the software in your host machine
要求が送信された後でクライアントが異常終了した場合、デフォルトでは何も記録されず、結果として生じるClientAbortException
は、ErrorAttributes#getError
を介してフィルタで利用可能である。
どのようにして要求中止を同じ方法で処理できますか?つまり、デフォルトでは警告/エラーが記録されず、クライアントが中止したことをカスタムフィルタが認識できるようになります。