Spring @RequestBody json反序列化 - 不支持的媒体类型

时间:2014-09-22 15:40:20

标签: json spring-mvc jackson

我正在使用spring 4.1.0.RELEASE:

获得着名的Json反序列化异常

org.springframework.web.HttpMediaTypeNotSupportedException:内容类型' application / json; charset = UTF-8'不支持

只有通过几个类似的线程后,我仍然无法找到问题的原因

这是我的控制者:

@RequestMapping(value = "/", method = RequestMethod.POST, produces = MediaType.APPLICATION_JSON_VALUE, consumes = MediaType.APPLICATION_JSON_VALUE)
public  @ResponseBody String myMethod( @RequestBody MyObj request) {

    .....
}

POJO:

public class MyObj implements Serializable{

/**
 * 
 */
private static final long serialVersionUID = 1L;

Integer something;  
Integer[] somethingElse;

// Getters and setters

}

我确实有杰克逊依赖:

<dependency>
        <groupId>org.codehaus.jackson</groupId>
        <artifactId>jackson-mapper-asl</artifactId>
        <version>1.9.6</version>
    </dependency>

在我的POM中

我发出以下请求:

{    &#34;东西&#34; :4,    &#34; somethingElse&#34;:[1,2] }

我检查过我有一个格式正确的JSON,它在我的服务器上点击了相应的控制器。

现在可能出错了????

编辑: 配置中的这一更改解决了问题:

在我的root配置

<bean id="jacksonMessageConverter"
    class="org.springframework.http.converter.json.MappingJackson2HttpMessageConverter">
    <property name="objectMapper" ref="jacksonObjectMapper" />
    <property name="supportedMediaTypes">
        <list>
            <bean class="org.springframework.http.MediaType">
                <constructor-arg index="0" value="application" />
                <constructor-arg index="1" value="json" />
                <constructor-arg index="2" value="UTF-8" />
            </bean>
        </list>
    </property>
</bean> 
<bean id="jacksonObjectMapper" class="com.fasterxml.jackson.databind.ObjectMapper">

在servlet配置

<mvc:annotation-driven> 
    <mvc:message-converters register-defaults="false">       
       <beans:ref bean="jacksonMessageConverter"></beans:ref>
   </mvc:message-converters>
</mvc:annotation-driven>

在POM中,添加最新版本的
杰克逊映射器-ASL, 杰克逊核心, 杰克逊 - 数据绑定, 杰克逊 - 注解

谢谢大家

1 个答案:

答案 0 :(得分:1)

您是否已禁用默认的MessageConverter?似乎在您的配置中缺少MappingJackson2MessageConverter。

你能提供你的mvc配置吗?