SpringMVC4返回json
发布日期:2021-05-16 03:11:03 浏览次数:22 分类:原创文章

本文共 5937 字,大约阅读时间需要 19 分钟。

前言

     目前前后端分离后,接口大多数返回给前端的都是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搞定。

 

上一篇:人耳听觉阈值
下一篇:SpringMVC Hello World

发表评论

最新留言

表示我来过!
[***.240.166.169]2025年05月06日 11时18分45秒