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>

参考技术A jackson 版本升到2.5.3试试

Spring异常累计Spring注解与扫描,NoUniqueBeanDefinitionException

spring中可以使用注解机制,代替传统的在xml中配置一个bean。

  1. <pre name="code" class="java">@Component  
  2. public class LoadMessageJob{  
  3.  // code  
  4. }  

和<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 和Mybatis 整合

SpringMVC + MyBatis整合

spring使用context:property-placeholder载不进属性问题

Spring简单的小例子SpringDemo,用于初略理解什么是Spring以及JavaBean的一些概念

SessionDestroyedEvent getSecurityContexts() 始终为空