ProtobufJsonFormatHttpMessageConverter
REST エンドポイントで JSON リクエスト本文を proto に解析するために使用しています。
@Bean
ProtobufHttpMessageConverter protobufHttpMessageConverter() {
return new ProtobufJsonFormatHttpMessageConverter(
JsonFormat.parser(), JsonFormat.printer().includingDefaultValueFields());
}
リクエストに列挙型があるとします。値にタイプミスがある場合、たとえば、
{
"type": "ELEPHAANT"
}
本文が空の応答が返さHTTP 400
れ、コンソールには次のように表示されます。
DEBUG o.s.w.s.DispatcherServlet - POST "/foo-search", parameters={}
DEBUG o.s.w.s.m.m.a.RequestMappingHandlerMapping - Mapped to com.foobar.MasterController#sample(SampleRequest)
DEBUG o.s.w.s.m.m.a.ServletInvocableHandlerMethod - Could not resolve parameter [0] in public com.foobar.models.ResponseOuterClass$SampleResponse com.foobar.MasterController.Sample(com.foobar.models.SampleRequestOuterClass$SampleRequest): I/O error while reading input message; nested exception is com.google.protobuf.InvalidProtocolBufferException: Invalid enum value: ELEPHAANT for enum type: SampleRequest.Filter.Type
DEBUG o.s.w.s.m.m.a.ExceptionHandlerExceptionResolver - Using @ExceptionHandler com.foobar.advice.ExceptionHandlerAdvice#handleException(Exception, WebRequest)
DEBUG o.s.w.s.m.m.a.HttpEntityMethodProcessor - No match for [*/*], supported: []
DEBUG o.s.w.s.m.m.a.ExceptionHandlerExceptionResolver - Resolved [org.springframework.http.converter.HttpMessageNotReadableException: I/O error while reading input message; nested exception is com.google.protobuf.InvalidProtocolBufferException: Invalid enum value: ELEPHAANT for enum type: ObtSampleRequest.Filter.Type]
DEBUG o.s.w.s.DispatcherServlet - Completed 400 BAD_REQUEST
この問題は、コンソール ログで明らかです。
Invalid enum value: ELEPHAANT for enum type: ObtSampleRequest.Filter.Type
上記の情報を含めることで、応答本文をより便利にすることはできますか?