spring3.1.1正常的在spring 4.1.2 配置 jackson 返回406 如何解决
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了spring3.1.1正常的在spring 4.1.2 配置 jackson 返回406 如何解决相关的知识,希望对你有一定的参考价值。
我的配置: pom 配置了com.fasterxml.jackson.core的 jackson-databind,jackson-core的2.44版本
servlet.xml:
<mvc:annotation-driven />
<bean id="mappingJacksonHttpMessageConverter"
class="org.springframework.http.converter.json.MappingJackson2HttpMessageConverter">
<property name="supportedMediaTypes">
<list>
<value>text/plain;charset=UTF-8</value>
<value>application/json;charset=UTF-8</value>
<value>text/html;charset=UTF-8</value>
</list>
</property>
</bean>
@RequestMapping("/updatecompany")
//@SuppressWarnings("unchecked","rawtypes")
@SuppressWarnings("all")
@ResponseBody
public AjaxJson updatecompany(HttpServletRequest request,
HttpServletResponse response, Map maps) throws Exception
String description = request.getParameter("description");
AjaxJson aj= new AjaxJson();
Map m = new HashMap<>();
m.put("ding",new String("shunwei"));
//aj.setAttributes(m);
aj.setMsg("hiji");
response.setContentType("application/json;charset=utf-8");
return aj;
//return "abc";
此配置在spring3.1.1运行正常把(MappingJackson2HttpMessageConverter改为MappingJacksonHttpMessageConverter)
<bean
class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter">
<property name="cacheSeconds" value="0" />
<property name="messageConverters">
<list>
<ref bean="mappingJacksonHttpMessageConverter" /><!-- json转换器 -->
</list>
</property>
</bean>
Spring异常累计Spring注解与扫描,NoUniqueBeanDefinitionException
spring中可以使用注解机制,代替传统的在xml中配置一个bean。
如
- <pre name="code" class="java">@Component
- public class LoadMessageJob{
- // code
- }
和<bean id="loadMessageJob" class="com.yicong.kisp.LoadMessageJob" />是等效的。
@Component默认类名的第一个字母小写成为bean的id,最后两者都需要扫描包以生效,<context:component- scan base-package="com.yicong.kisp.invoke">。这样才能在实现了 ApplicationContextAware的类中使用getBean("id")得到一个容器管理的实例。
实现ApplicationContextAware接口要实现 setApplicationContext(ApplicationContext arg0)方法。该方法传入一个ApplicationContext 对象,从这个object可以得到spring中所有被扫描的bean。所以,两步必不可少
1、@Component注解一个类或用定义
2、扫描所在包
补充一下:刚才大师和杨老遇到一个很艹蛋的问题,启动tocmat时一直在报
org.springframework.beans.factory.NoUniqueBeanDefinitionException: No qualifying bean of type [com.szkingdom.kisp.stock.MessageStockJob] is defined: expected single matching bean but found 2: com.szkingdom.kisp.stock.MessageStockJob#0,messageStockJob
很纳闷,这个类已经打了@component,并且扫描了,怎么会获取不到?换了类名就可以,这更说明是名字的问题了。怀疑是其他包的同类名,发现 没有,那就更奇怪了。最后的最后,在一个xml中发现了:<bean id = "...." class="....." >。这说明已经使用xml形式定义过了,就不能再用Component。
我们做了尝试:写了两个相同的 <bean id="...">,程序正常。一个<bean>和Component就报错。
猜想:两个相同的 <bean id="...">会覆盖,取最后一个为准,但是<bean>和Component可能不是这样的机制了。Spring的启动和加载机制挺复杂的。
其实一开始没有好好看异常的具体信息,只是在想为什么找不到,NoUniqueBean写得很清楚了,不是唯一的bean,如果早些注意到这个也许就会发现是不是在其他地方多次定义了它。
以后就不要在这种问题上吃亏了。
以上是关于spring3.1.1正常的在spring 4.1.2 配置 jackson 返回406 如何解决的主要内容,如果未能解决你的问题,请参考以下文章
spring 3.1.1 的 junit 测试,hibernate 4.0.1 Web 应用程序在创建会话工厂 bean 期间失败
spring使用context:property-placeholder载不进属性问题