Spring MVC属于SpringFrameWork的后续产品,已经融合在Spring Web Flow里面。Spring 框架提供了构建 Web 应用程序的全功能 MVC 模块。使用 Spring 可插入的 MVC架构,从而在使用Spring进行WEB开发时,可以选择使用Spring的SpringMVC框架或集成其他MVC开发框架,如Struts1,Struts2等。
1、第一种方式是spring2时代的产物,也就是每个json视图controller配置一个Jsoniew。
如:<bean id=”defaultJsonView” class=”org.springframework.w
在Spring MVC框架中,返回JSON数据是常见的操作,特别是在构建RESTful API时。JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,易于人阅读和编写,同时也易于机器解析和生成。以下将详细介绍Spring MVC返回JSON数据的三种方式:
1. **配置JsonView**
在Spring 2时代,开发者通常会为每个处理JSON输出的Controller配置一个JsonView。通过在配置文件中定义一个`<bean>`,比如使用`MappingJacksonJsonView`或`MappingJackson2JsonView`。例如:
```xml
<bean id="defaultJsonView" class="org.springframework.web.servlet.view.json.MappingJacksonJsonView" />
```
或
```xml
<bean id="defaultJsonView" class="org.springframework.web.servlet.view.json.MappingJackson2JsonView" />
```
这需要引入Jackson库的依赖。当Controller的返回类型匹配到这个视图时,Spring MVC会自动将模型数据转换为JSON格式并返回。
2. **手动序列化对象**
第二种方法是通过JSON库(如Jackson, FastJSON, Gson等)将Java对象直接序列化为JSON字符串,然后通过`HttpServletResponse`的`getOutputStream()`或`getWriter()`输出。以下是一个使用Gson的例子:
```java
public class JsonUtil {
private static Gson gson = new Gson();
public static String toJson(Object src) {
if (src == null) {
return gson.toJson(JsonNull.INSTANCE);
}
return gson.toJson(src);
}
}
```
在Controller中,可以像这样使用:
```java
@RequestMapping("/list")
public void list(HttpServletResponse response) {
// 获取数据
List<String> dataList = ...;
// 将数据转换为JSON并写入响应
try {
response.setContentType("application/json");
response.getWriter().write(JsonUtil.toJson(dataList));
} catch (IOException e) {
// 处理异常
}
}
```
3. **使用`@ResponseBody`注解**
Spring MVC 3引入了`@ResponseBody`注解,它可以将Controller方法的返回值直接转换为HTTP响应体的内容。这种方式更加简洁,不再需要配置视图解析器。例如:
```java
@ResponseBody
@RequestMapping("/list")
public List<String> list() {
// 获取数据
List<String> dataList = ...;
return dataList;
}
```
要使`@ResponseBody`工作,需要在Spring配置中启用注解驱动的处理,如`<mvc:annotation-driven />`,并添加Jackson库的依赖。对于Spring 3.1及更高版本,`RequestMappingHandlerAdapter`会自动处理JSON转换。
如果需要自定义配置,可以如下所示:
```xml
<bean class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter">
<property name="ignoreDefaultModelOnRedirect" value="true"/>
<property name="messageConverters">
<list>
<bean class="org.springframework.http.converter.json.MappingJacksonHttpMessageConverter"/>
</list>
</property>
</bean>
```
请注意,这些配置可能需要相应的Jackson库的jar包,如`jackson-mapper-asl-*.jar`和`jackson-core-asl-*.jar`。
随着Spring MVC的发展,处理JSON的方式变得更加便捷,这得益于注解驱动和自动配置的增强。然而,这也意味着开发者需要更深入地理解Spring的内部机制,以便在需要时进行自定义配置或优化。选择哪种方式取决于项目的需求、团队的技术栈以及对性能和灵活性的考虑。