任何以50美元解决此问题的人,请联系
我根据要求得到了不可接受的"接受"但是,我相信我做的一切都是正确的,我可以。有人可以帮助解决此问题。我使用的是Spring 4.1。
目标是能够以 text / xml 格式返回响应。如果我删除produce = text / xml指令然后我的应用程序工作,即没有错误,但源系统以意外的方式处理响应。
请求如下: curl -X POST -H"内容类型:application / x-www-form-urlencoded" -H"授权:基本YWRtaW46YWRtaW4 =" -H"缓存控制:无缓存" -H" Postman-Token:78637a4f-e153-4242-c922-96757d01442a" -d然后值......
我的Pom:
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-core</artifactId>
<version>2.8.0.rc1</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.8.0.rc1</version>
</dependency>
<dependency>
<groupId>org.codehaus.jackson</groupId>
<artifactId>jackson-core-asl</artifactId>
<version>1.9.13</version>
</dependency>
<dependency>
<groupId>org.codehaus.jackson</groupId>
<artifactId>jackson-mapper-asl</artifactId>
<version>1.9.13</version>
</dependency>
我的控制器有以下注释:
@RestController
@RequestMapping("/test")
@EnableWebMvcMy Controller has the following notations:
主类具有以下符号 @组态 @EnableAutoConfiguration @ComponentScan
我没有应用程序上下文xml,因为我正在使用@Autowired 在我的终点方法如下
@RequestMapping(value="/IDEA", headers = {"Accept=*/*"}, produces="text/xml", method= {RequestMethod.POST, RequestMethod.GET})
@Autowired
public MyResult processMyRequest(HttpServletRequest request)
当前日志
2016-08-11 13:38:04.076 INFO 89535 --- [nio-8080-exec-2] c.f.fnocc.injestor.MyController:POST CALLED 2016-08-11 13:38:04.079 INFO 89535 --- [nio-8080-exec-2] cffnocc.injestor.MyController:从ipAddress收到的请求:0:0:0:0:0:0:0: 1 2016-08-11 13:38:04.082 INFO 89535 --- [nio-8080-exec-2] c.f.fnocc.injestor.MyController:REQUEST INFORMATION:[ 2016-08-11 13:38:04.084 INFO 89535 --- [nio-8080-exec-2] scaAnnotationConfigApplicationContext:刷新org.springframework.context.annotation.AnnotationConfigApplicationContext@af3b571:启动日期[Thu Aug 11 13:38: 04 BST 2016];上下文层次结构的根 2016-08-11 13:38:04.095 INFO 89535 --- [nio-8080-exec-2] f.a.AutowiredAnnotationBeanPostProcessor:JSR-330&#39; javax.inject.Inject&#39;找到并支持自动装配的注释 2016-08-11 13:38:04.119 INFO 89535 --- [nio-8080-exec-2] scaAnnotationConfigApplicationContext:刷新org.springframework.context.annotation.AnnotationConfigApplicationContext@142abfa2:启动日期[Thu Aug 11 13:38: 04 BST 2016];上下文层次结构的根 2016-08-11 13:38:04.124 INFO 89535 --- [nio-8080-exec-2] f.a.AutowiredAnnotationBeanPostProcessor:JSR-330&#39; javax.inject.Inject&#39;找到并支持自动装配的注释 2016-08-11 13:38:04.150 ERROR 89535 --- [nio-8080-exec-2] c.f.fnocc.injestor.MyController:发生错误。
答案 0 :(得分:0)
我看到的第一个问题@EnableWebMvc
应该与@Configuration
一起在主要类别上指定,但我不认为在指定@EnableAutoConfiguration
时甚至需要它。
另一个问题是@RequestMapping()
具有consumes
的属性,这是您应该使用的,而不是查找接受标头。原因是接受标头通常包含多种媒体类型,而不仅仅是*/*
,因此检查该标头上的相等性是不会的。
*更新* 我在用于解释consumes
标头而不是Content-Type
标头的Accept
上出错了。 Spring尝试将produces
与Accept
标头匹配,以确定该方法是否可以响应传入的请求。这更有意义为什么你得到406错误,因为Spring看到方法试图输出text/xml
但请求可能不接受Accept
标题中的内容类型。
要进一步排除故障,您可以设置请求记录器,以查看有关请求如何进入服务的详细信息,以确定是否存在导致Spring无法正常处理的内容。如果您添加以下bean并在org.springframework.web.filter.CommonsRequestLoggingFilter
上启用DEBUG级别日志记录,那么您可以看到。
@Bean
public Filter logFilter() {
CommonsRequestLoggingFilter filter = new CommonsRequestLoggingFilter();
filter.setIncludeQueryString(false);
filter.setIncludePayload(false);
filter.setIncludeHeaders(true);
return filter;
}
如果您可以使用有助于进行问题排查的请求日志更新您的问题。
*更新#2 * 能够重现错误。为DEBUG
添加org.springframework.web
日志记录级别可以更清楚地显示问题。
2016-08-11 02:26:58.242 DEBUG 82904 --- [nio-8080-exec-1] o.s.web.servlet.DispatcherServlet : DispatcherServlet with name 'dispatcherServlet' processing GET request for [/test/IDEA]
2016-08-11 02:26:58.244 DEBUG 82904 --- [nio-8080-exec-1] s.w.s.m.m.a.RequestMappingHandlerMapping : Looking up handler method for path /test/IDEA
2016-08-11 02:26:58.247 DEBUG 82904 --- [nio-8080-exec-1] s.w.s.m.m.a.RequestMappingHandlerMapping : Returning handler method [public ca.tuatara.stackoverflow.MyController$MyResult ca.tuatara.stackoverflow.MyController.processMyRequest(javax.servlet.http.HttpServletRequest)]
2016-08-11 02:26:58.247 DEBUG 82904 --- [nio-8080-exec-1] o.s.web.servlet.DispatcherServlet : Last-Modified value for [/test/IDEA] is: -1
2016-08-11 02:26:58.258 DEBUG 82904 --- [nio-8080-exec-1] .m.m.a.ExceptionHandlerExceptionResolver : Resolving exception from handler [public ca.tuatara.stackoverflow.MyController$MyResult ca.tuatara.stackoverflow.MyController.processMyRequest(javax.servlet.http.HttpServletRequest)]: org.springframework.web.HttpMediaTypeNotAcceptableException: Could not find acceptable representation
Could not find acceptable representation
是关键。通过指定您想要XML,您必须包含一个库,以将对象编组为XML,如Spring MVC文档中所述。添加依赖项:
<dependency>
<groupId>com.fasterxml.jackson.dataformat</groupId>
<artifactId>jackson-dataformat-xml</artifactId>
</dependency>
使其适用于我的示例应用程序。试一试!