我在Spring 3.2.5中尝试在XML免费配置中设置JSON编组时遇到问题
这是我的配置类:
@Configuration
@EnableWebMvc
@ComponentScan(basePackages = "com.pworld.mvc.controller")
@Import(DatabaseBeansConfig.class)
public class MainServletConfig extends WebMvcConfigurerAdapter {
private static Logger logger = LoggerFactory.getLogger("MainServletConfig");
private List<HttpMessageConverter<?>> messageConverters; // Cached: this
@Override
void configureMessageConverters(List<HttpMessageConverter<?>> converters) {
// Note: this overwrites the default message converters.
converters.addAll(getMessageConverters());
}
/**
* The message converters for the content types we support.
*
* @return the message converters; returns the same list on subsequent calls
*/
private List<HttpMessageConverter<?>> getMessageConverters() {
if (messageConverters == null) {
messageConverters = new ArrayList<HttpMessageConverter<?>>();
messageConverters.add(new MappingJacksonHttpMessageConverter());
}
return messageConverters;
}
}
如果我调试此代码,我可以看到默认转换器中已有MappingJackson2HttpMessageConverter
,因此不需要添加另一个吗?
我的控制器:
@RequestMapping(value = CARS_URL + HTML_SUFFIX,
method = RequestMethod.POST,
consumes = {MediaType.APPLICATION_JSON},
produces = {MediaType.APPLICATION_JSON})
@ResponseBody
public Car handlePagination(Model model, @RequestParam(value = PAG_NUM, required = true) int pagNum,
@RequestParam(value = ITEMS_PER_PAGE, required = true) int itemsPerPage)
{
return new Car();
}
因此,每当我使用该方法时,我都会得到一个
HTTP状态406 - 不可接受的响应
我尝试返回一个普通的字符串并且它有效,它只是JSON解析而不是踢... ...
我在我的课程中:
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-core</artifactId>
<version>2.1.1</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.1.2</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-annotations</artifactId>
<version>2.1.2</version>
</dependency>
我还缺少什么?我从来没有遇到过在XML <mvc:annotation-driven />
配置中工作的问题....
请求正文
Request Url: http://localhost:9080/xxx.html?pagNum=1&itemsPerPage=8
Request Method: POST
Status Code: 406
Params: {}
请求标题
Accept: application/json
Content-Type: application/json
Connection: keep-alive
Origin: chrome-extension: //rest-console-id
User-Agent: Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/33.0.1750.154 Safari/537.36
我从服务器获得406
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><title>GlassFish Server Open Source Edition 4.0 - Error report</title><style type="text/css"><!--H1 {font-family:Tahoma,Arial,sans-serif;color:white;background-color:#525D76;font-size:22px;} H2 {font-family:Tahoma,Arial,sans-serif;color:white;background-color:#525D76;font-size:16px;} H3 {font-family:Tahoma,Arial,sans-serif;color:white;background-color:#525D76;font-size:14px;} BODY {font-family:Tahoma,Arial,sans-serif;color:black;background-color:white;} B {font-family:Tahoma,Arial,sans-serif;color:white;background-color:#525D76;} P {font-family:Tahoma,Arial,sans-serif;background:white;color:black;font-size:12px;}A {color : black;}HR {color : #525D76;}--></style> </head><body><h1>HTTP Status 406 - Not Acceptable</h1><hr/><p><b>type</b> Status report</p><p><b>message</b>Not Acceptable</p><p><b>description</b>The resource identified by this request is only capable of generating responses with characteristics not acceptable according to the request "accept" headers.</p><hr/><h3>GlassFish Server Open Source Edition 4.0 </h3></body></html>
春季日志:
2014-03-18T15:42:48.790+0000|INFO: TRACE DispatcherServlet - Bound request context to thread: org.apache.catalina.connector.RequestFacade@39b08627
2014-03-18T15:42:48.790+0000|INFO: DEBUG DispatcherServlet - DispatcherServlet with name 'main' processing POST request for [/cars.html]
2014-03-18T15:42:48.790+0000|INFO: TRACE DispatcherServlet - Testing handler map [org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping@6e078e68] in DispatcherServlet with name 'main'
2014-03-18T15:42:48.790+0000|INFO: DEBUG RequestMappingHandlerMapping - Looking up handler method for path /cars.html
2014-03-18T15:42:48.790+0000|INFO: DEBUG ExceptionHandlerExceptionResolver - Resolving exception from handler [null]: org.springframework.web.HttpMediaTypeNotAcceptableException: Could not find acceptable representation
2014-03-18T15:42:48.791+0000|INFO: DEBUG ResponseStatusExceptionResolver - Resolving exception from handler [null]: org.springframework.web.HttpMediaTypeNotAcceptableException: Could not find acceptable representation
2014-03-18T15:42:48.791+0000|INFO: DEBUG DefaultHandlerExceptionResolver - Resolving exception from handler [null]: org.springframework.web.HttpMediaTypeNotAcceptableException: Could not find acceptable representation
2014-03-18T15:42:48.791+0000|INFO: DEBUG DispatcherServlet - Null ModelAndView returned to DispatcherServlet with name 'main': assuming HandlerAdapter completed request handling
2014-03-18T15:42:48.791+0000|INFO: TRACE DispatcherServlet - Cleared thread-bound request context: org.apache.catalina.connector.RequestFacade@39b08627
2014-03-18T15:42:48.791+0000|INFO: DEBUG DispatcherServlet - Successfully completed request
2014-03-18T15:42:48.791+0000|INFO: TRACE AnnotationConfigWebApplicationContext - Publishing event in WebApplicationContext for namespace 'main-servlet': ServletRequestHandledEvent: url=[/cars.html]; client=[0:0:0:0:0:0:0:1]; method=[POST]; servlet=[main]; session=[null]; user=[null]; time=[1ms]; status=[OK]
2014-03-18T15:42:48.791+0000|INFO: TRACE AnnotationConfigWebApplicationContext - Publishing event in Root WebApplicationContext: ServletRequestHandledEvent: url=[/cars.html]; client=[0:0:0:0:0:0:0:1]; method=[POST]; servlet=[main]; session=[null]; user=[null]; time=[1ms]; status=[OK]
已解决,我将此作为参考:https://spring.io/blog/2013/05/11/content-negotiation-using-spring-mvc#annotated-account-class
我需要在@Configuration类中配置内容协商bean ....
感谢每个人!!
答案 0 :(得分:0)
首先在应用程序服务器上启用spring的日志并检查更多详细信息,但由于缺少依赖性,此错误多次发生,尝试更改Jackson的版本。