SpringMVC4返回json

前言

     目前前后端分离后,接口大多数返回给前端的都是json数据,那么我尝试用SpringMVC4的Controller返回json。demo过程中遇到了几个问题写出来和java初学者分享一下。

开发环境

    idea2016、jdk1.8、tomcat7

    SpringMVC4、jackson2.5

开发问题

    1、SpringMVC4如果想返回json的话可以使用ResponseBody、ResponseEntity注解,如果你打算返回注解而没有引用json处理jar包,访问http://localhost:8080/rest/users时会提示http 406。

    2、SpringMVC4版本后json序列化必须使用jackson相关,jackson-annotations-2.5.0.jar,jackson-core-2.5.0.jar,jackson-databind-2.5.0.jar。我开始用的fastjson但会报错:

       Java.lang.NoClassDefFoundError: com/fasterxml/jackson/core/JsonProcessingException

 

项目配置文件

    初学Spring,配置文件是最烦神的,概括看来首先下载jar包,你需要关注pom.xml、其次是web.xml、spring-mvc.xml。

1、pom.xml

 <dependencies>
    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>3.8.1</version>
      <scope>test</scope>
    </dependency>

    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-core</artifactId>
      <version>${spring.version}</version>
    </dependency>
    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-web</artifactId>
      <version>${spring.version}</version>
    </dependency>
    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-webmvc</artifactId>
      <version>${spring.version}</version>
    </dependency>
    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-oxm</artifactId>
      <version>${spring.version}</version>
    </dependency>

    <dependency>
      <groupId>com.alibaba</groupId>
      <artifactId>fastjson</artifactId>
      <version>1.2.12</version>
    </dependency>
    <dependency>
      <groupId>com.fasterxml.jackson.core</groupId>
      <artifactId>jackson-core</artifactId>
      <version>2.5.0</version>
    </dependency>
    <dependency>
      <groupId>com.fasterxml.jackson.core</groupId>
      <artifactId>jackson-annotations</artifactId>
      <version>2.5.0</version>
    </dependency>
    <dependency>
      <groupId>com.fasterxml.jackson.core</groupId>
      <artifactId>jackson-databind</artifactId>
      <version>2.5.0</version>
    </dependency>
   
  </dependencies>

2、web.xml

<web-app>
  <display-name>Archetype Created Web Application</display-name>

  <!-- Spring监听 -->
  <listener>
    <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
  </listener>


  <context-param>
    <param-name>contextConfigLocation</param-name>
    <param-value>classpath:applicationContext.xml</param-value>
  </context-param>

  <servlet>
    <servlet-name>MVC</servlet-name>
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
    <init-param>
      <param-name>contextConfigLocation</param-name>
      <param-value>classpath:spring-mvc.xml</param-value>
    </init-param>
    <load-on-startup>1</load-on-startup>
  </servlet>
  <servlet-mapping>
    <servlet-name>MVC</servlet-name>
    <url-pattern>/</url-pattern>
  </servlet-mapping>


</web-app>

3、spring-mvc.xml

<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns:mvc="http://www.springframework.org/schema/mvc"
       xmlns:beans="http://www.springframework.org/schema/beans"
       xmlns:context="http://www.springframework.org/schema/context"
       xsi:schemaLocation="
       http://www.springframework.org/schema/beans
       http://www.springframework.org/schema/beans/spring-beans.xsd
       http://www.springframework.org/schema/mvc
       http://www.springframework.org/schema/mvc/spring-mvc.xsd
       http://www.springframework.org/schema/context
       http://www.springframework.org/schema/context/spring-context.xsd">
    <!-- 注解驱动 -->
    <mvc:annotation-driven />

    <!-- 扫描包 -->
    <context:component-scan base-package="com.autohome.controller" />

    <!-- 视图解析 -->
    <bean class="org.springframework.web.servlet.view.UrlBasedViewResolver">
        <!-- 返回的视图模型数据需要经过jstl来处理 -->
        <property name="viewClass"
                  value="org.springframework.web.servlet.view.JstlView" />
        <property name="prefix" value="/WEB-INF/views/" />
        <property name="suffix" value=".jsp" />
    </bean>

    <bean id="stringConverter"
          class="org.springframework.http.converter.StringHttpMessageConverter">
        <property name="supportedMediaTypes">
            <list>
                <value>text/plain;charset=UTF-8</value>
            </list>
        </property>
    </bean>
    <bean id="jsonConverter"
          class="org.springframework.http.converter.json.MappingJackson2HttpMessageConverter"></bean>
    <bean
            class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter">
        <property name="messageConverters">
            <list>
                <ref bean="stringConverter" />
                <ref bean="jsonConverter" />
            </list>
        </property>
    </bean>

</beans>

     OK, 可以编写rest controller了。

@Controller
@RequestMapping("/rest")
public class RestController {

    @RequestMapping(value="/sayHello",method = RequestMethod.GET)
    public @ResponseBody
    String sayHello(){
        return "{"returncode":0,"message":"hello world"}";
    }

    @RequestMapping(value="/users")
    public ResponseEntity<List<User>> listAllUser(){
        List<User> list =new ArrayList<User>();

        User user =new User();
        user.setId(1);
        user.setName("test");
        user.setAge(30);

        User user2 =new User();
        user2.setId(2);
        user2.setName("test1");
        user2.setAge(30);

        list.add(user);
        list.add(user2);

        return new ResponseEntity<List<User>>(list, HttpStatus.OK);
    }

    @RequestMapping(value="/user/{id}",method = RequestMethod.GET)
    public ResponseEntity<User> getUser(@PathVariable long id){
        System.out.println("id:"+id);

        User user =new User();
        user.setId(1);
        user.setName("test");
        user.setAge(30);

        return new ResponseEntity<User>(user,HttpStatus.OK);
    }

}

  

   输入http://localhost:8080/rest/users、http://localhost:8080/rest/user/1/  ,第一个SpringMVC demo搞定。

原文地址:https://www.cnblogs.com/sword-successful/p/6402562.html