SpringMVC4返回json

时间:2023-03-10 06:08:34
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搞定。