SpringMVC使用@ResponseBody自动转化Json数据出错

这两天在搭建一个SpringMVC的小项目,用到异步处理一个请求的时候,发现没有办法获得json返回值,获得这个错误。
NoClassDefFoundError: com/fasterxml/jackson/core/JsonProcessingException
重复检查了几遍:

  • 方法已经标识了@ResponseBody
@Controller
public class LoginIndex {
    @RequestMapping("/ajax" )
    @ResponseBody
    public Map<String ,Object> test(HttpServletResponse response){
        List<String> list = new ArrayList<String>(Arrays.asList("demo","test","hehei"));
        Map<String, Object> map = new HashMap<String, Object>();
        map.put("1", "demo");
        map.put("2", "test");

        return map;
    }
}
  • maven依赖已配置
<dependency>
            <groupId>com.fasterxml.jackson.coregroupId>
            <artifactId>jackson-databindartifactId>
            <version>2.7.4version>
        dependency>
        <dependency>
            <groupId>com.fasterxml.jackson.coregroupId>
            <artifactId>jackson-coreartifactId>
            <version>2.7.4version>
        dependency>
        <dependency>
            <groupId>com.fasterxml.jackson.coregroupId>
            <artifactId>jackson-annotationsartifactId>
            <version>2.7.4version>
        dependency>

然后在网上找解决方法,很多说需要配置转化器的bean,虽然我不太觉得是这个问题,但还是抱着试一试尝试了一下,结果都是不行。

没发挥作用的配置方法

  1. 配置MappingJackson2HttpMessageConverter bean,然后属性中新增一个supportMediatype,最后在HandlerMapping(我用了mvc3之后的>)配置。
   <bean id="mappingJacksonHttpMessageConverter"
          class="org.springframework.http.converter.json.MappingJackson2HttpMessageConverter">
        <property name="supportedMediaTypes">
            <list>
                <value>application/json;charset=UTF-8value>
            list>
        property>
    bean>
     <mvc:annotation-driven >
        <mvc:message-converters>
            <ref bean="mappingJacksonHttpMessageConverter" />
        mvc:message-converters>
    mvc:annotation-driven>
    2.
<bean id="mappingJacksonHttpMessageConverter"
          class="org.springframework.http.converter.json.MappingJackson2HttpMessageConverter">
        <property name = "supportedMediaTypes">
            <list>
                <bean class="org.springframework.http.MediaType">
                    <constructor-arg index="0" value="text"/>
                    <constructor-arg index="1" value="plain"/>
                    <constructor-arg index="2" value="UTF-8"/>
                bean>
                <bean class="org.springframework.http.MediaType">
                    <constructor-arg index="0" value="*"/>
                    <constructor-arg index="1" value="*"/>
                    <constructor-arg index="2" value="UTF-8"/>
                bean>
                <bean class="org.springframework.http.MediaType">
                    <constructor-arg index="0" value="text"/>
                    <constructor-arg index="1" value="*"/>
                    <constructor-arg index="2" value="UTF-8"/>
                bean>
                <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>

配置了之后打开页面,出现另外一个错误
NoClassDefFoundError: com/fasterxml/jackson/core/JsonProcessingException
maven的依赖已经导入并且编译了,但是spring似乎没有读取到。我觉得原因可能是
1. 开发工具IDEA的问题
2. spring和jackson,或者jdk(我用的1.8)版本对应问题
3. 包有冲突

最后解决

我从网上下了jackson三个jar包,直接放到项目目录底下,重启,解决



2018年6月8日更新
今天又导入Redis的依赖发现这个ClassNotFound错误又出现,总不能每次都下载jar包手动加入吧。在网上反复找找到

https://blog.csdn.net/thousa_ho/article/details/77449652

里面说到idea 的artiface 没有自动导入maven的依赖,于是在artiface中加入,果然解决了,但是为什么没有自动导入呢。帖子中说要用 archetype类型

你可能感兴趣的:(Java技术)