400 错误:无法找到可接受的表示形式 - HttpMediaTypeNotAcceptableException
2023-04-28 14:57:03,870 [http-nio-7006-exec-5] ERROR [com.ccssoft.m8dmp.pam.common.PamExceptionHandler] PamExceptionHandler.java:78 - Exception: {'detail': 'Could not find acceptable representation', 'errCode': 400, 'exceptionClass': 'com.ccssoft.m8.common.ccssoft.modules.exception.RRException', 'message': 'Could not find acceptable representation'} 2023-04-28 14:57:03,871 [http-nio-7006-exec-5] WARN [o.s.w.s.m.m.a.ExceptionHandlerExceptionResolver] ExceptionHandlerExceptionResolver.java:391 - Failed to invoke @ExceptionHandler method: public com.ccssoft.m8.common.ccssoft.modules.exception.ExceptionData com.ccssoft.m8dmp.pam.common.PamExceptionHandler.handleException(java.lang.Exception) org.springframework.web.HttpMediaTypeNotAcceptableException: Could not find acceptable representation at org.springframework.web.servlet.mvc.method.annotation.AbstractMessageConverterMethodProcessor.writeWithMessageConverters(AbstractMessageConverterMethodProcessor.java:259) at org.springframework.web.servlet.mvc.method.annotation.RequestResponseBodyMethodProcessor.handleReturnValue(RequestResponseBodyMethodProcessor.java:174) at org.springframework.web.method.support.HandlerMethodReturnValueHandlerComposite.handleReturnValue(HandlerMethodReturnValueHandlerComposite.java:81) at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:113) at org.springframework.web.servlet.mvc.method.annotation.ExceptionHandlerExceptionResolver.doResolveHandlerMethodException(ExceptionHandlerExceptionResolver.java:384) at org.springframework.web.servlet.handler.AbstractHandlerMethodExceptionResolver.doResolveException(AbstractHandlerMethodExceptionResolver.java:59) at org.springframework.web.servlet.handler.AbstractHandlerExceptionResolver.resolveException(AbstractHandlerExceptionResolver.java:136) at org.springframework.web.servlet.handler.HandlerExceptionResolverComposite.resolveException(HandlerExceptionResolverComposite.java:76) at org.springframework.web.servlet.DispatcherServlet.processHandlerException(DispatcherServlet.java:1222) at org.springframework.web.servlet.DispatcherServlet.processDispatchResult(DispatcherServlet.java:1034) at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:984) at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:901) at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:970) at org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:861) at javax.servlet.http.HttpServlet.service(HttpServlet.java:635) at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:846) at javax.servlet.http.HttpServlet.service(HttpServlet.java:742) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:231) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166) at org.apache.catalina.core.ApplicationDispatcher.invoke(ApplicationDispatcher.java:728) at org.apache.catalina.core.ApplicationDispatcher.processRequest(ApplicationDispatcher.java:469) at org.apache.catalina.core.ApplicationDispatcher.doForward(ApplicationDispatcher.java:392) at org.apache.catalina.core.ApplicationDispatcher.forward(ApplicationDispatcher.java:311) at org.apache.catalina.core.StandardHostValve.custom(StandardHostValve.java:395) at org.apache.catalina.core.StandardHostValve.status(StandardHostValve.java:254) at org.apache.catalina.core.StandardHostValve.throwable(StandardHostValve.java:349) at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:175) at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:81) at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:87) at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:342) at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:803) at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:66) at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:868) at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1459) at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49) at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624) at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61) at java.lang.Thread.run(Thread.java:748)
该日志记录了一个应用程序中的异常,异常类为 HttpMediaTypeNotAcceptableException,错误消息为 'Could not find acceptable representation',错误代码为 400。这种异常通常在客户端请求中指定了不受支持的媒体类型或内容协商失败时发生。在这种情况下,服务器无法提供客户端请求的表示形式。可能需要检查客户端请求中指定的媒体类型是否正确,并确保服务器支持该媒体类型。
解决方法:
- 检查客户端请求的媒体类型: 确保客户端请求中指定的媒体类型是服务器支持的。可以使用浏览器的开发者工具或网络抓包工具查看请求的 Accept 头部。
- 检查服务器配置: 确认服务器是否配置了支持客户端请求的媒体类型。可以使用 Spring Boot 的 @RestController 或 @RequestMapping 注解指定响应的媒体类型。
- 检查内容协商: 确保内容协商机制正常工作。内容协商是指客户端和服务器之间协商数据传输的格式和编码方式。可以使用 Spring Boot 的 ContentNegotiationConfigurer 接口自定义内容协商规则。
示例:
@RestController
@RequestMapping(value = '/api/v1', produces = MediaType.APPLICATION_JSON_VALUE)
public class MyController {
// ...
}
上述代码示例中,使用 @RequestMapping 注解指定了控制器方法的响应媒体类型为 APPLICATION_JSON。
注意:
- 如果客户端请求的媒体类型是 'text/plain',而服务器只配置了 'application/json',则会导致 'HttpMediaTypeNotAcceptableException' 错误。
- 如果服务器没有配置任何媒体类型,则默认返回 'application/json' 类型的响应。
更多信息:
原文地址: https://www.cveoy.top/t/topic/nIR7 著作权归作者所有。请勿转载和采集!