spring mvc如何返回json 数据的,大概有如下几种:
Spring MVC 3.0 返回JSON数据的方法
1. 直接 PrintWriter 输出
2. 使用 JSP 视图
3. 使用Spring内置的支持
以下为3.1之前的配置:
<bean class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter">
<property name="messageConverters">
<list>
<bean
class="org.springframework.http.converter.json.MappingJacksonHttpMessageConverter" />
</list>
</property>
</bean>
重点来了!
以下为3.1的配置:
spring mvc 3.1之后使用RequestMappingHandlerMapping和RequestMappingHandlerAdapter
替代了原有的DefaultMethodHandlerMapping和 AnnotationMethodHandlerAdapter ,
所以,3.1的返回json配置可以使用如下配置:
<bean
class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter"
p:ignoreDefaultModelOnRedirect="true" >
<property name="messageConverters">
<list>
<bean class="org.springframework.http.converter.json.MappingJacksonHttpMessageConverter"/>
</list>
</property>
</bean>
// WEB-INF/lib 中添加
jackson-mapper-asl-1.6.4.jar
jackson-core-asl-1.6.4.jar
// Controller 中 使用:@ResponseBody 标注方法,该方法返回 Java对象(支持复杂对象),
如:
public @ResponseBody User getUser(User u){
return u;
}
MappingJacksonHttpMessageConverter 会将对象转换为 JSON 输出
注意:当springMVC-servlet.xml中使用<mvc:annotation-driven />时,如果是3.1之前已经默认注入AnnotationMethodHandlerAdapter,3.1之后默认注入RequestMappingHandlerAdapter只需加上上面提及的jar包即可!
注意:默认情况下MappingJacksonHttpMessageConverter 会设置content为application/json,在IE9下返回会出现提示下载的现象,出现这种情况可以手动指定头信息为"text/html",或者"*/*"(所有,不确定就设这个)
如果是手动注入RequestMappingHandlerAdapter 可以这样设置
<bean
class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter"
p:ignoreDefaultModelOnRedirect="true">
<property name="messageConverters">
<list>
<bean
class="org.springframework.http.converter.json.MappingJacksonHttpMessageConverter"
p:supportedMediaTypes="*/*" />
</list>
</property>
</bean>
如果是采用mvc:annotation-driven标签 可以这样注入信息
<mvc:annotation-driven>
<mvc:message-converters register-defaults="true">
<bean
class="org.springframework.http.converter.json.MappingJacksonHttpMessageConverter"
p:supportedMediaTypes="*/*" />
</mvc:message-converters>
</mvc:annotation-driven>
注入的message-converters优先级高于默认注入的json转换器,mvc:annotation-driven标签见另一篇博客!
4. 自定义
// 配置 BeanNameViewResolver
<bean class="org.springframework.web.servlet.view.BeanNameViewResolver">
<property name="order" value="1" />
</bean>
<bean id="jsonView" class="test.TestJsonView" />
// 实现 TestJsonView
public class TestJsonView extends AbstractView {
@Override
protected void renderMergedOutputModel(Map<String, Object> model, HttpServletRequest request,
HttpServletResponse response) throws Exception {
JsonBuilder jb = new JsonBuilder();
PrintWriter out = response.getWriter();
out.print(jb.encode(model));
}
}
// Controller 中可以这样写:
ModelAndView mav = new ModelAndView("jsonView");
// mav.addObject ...
return mav;
分享到:
相关推荐
此外,`@ResponseBody`和`@RequestBody`注解也使得JSON和其他格式的数据交换更为方便。 7. **SpEL(Spring Expression Language)** SpEL是一种强大的表达式语言,用于在运行时查询和操作对象图。在Spring 3.1中,...
在Spring MVC框架中,返回JSON数据是常见的操作,特别是在构建RESTful API时。JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,易于人阅读和编写,同时也易于机器解析和生成。以下将详细介绍Spring ...
- 将视图数据返回给前端展示。 ##### 1.5 SpringMVC的控制器单例模式,怎么解决线程安全问题? 在SpringMVC中,控制器通常被定义为单例模式,这意味着所有请求都共享同一个控制器实例。因此,需要注意解决线程安全...
Spring MVC 支持 JSON 数据格式的输入和输出,通过 @ResponseBody 注解可以将方法返回的对象直接转换为 JSON,并发送回客户端。同时,使用 @RequestBody 注解可以从 JSON 请求体中解析数据。 七、文件上传 Spring ...
`@ResponseBody`和`@ControllerAdvice`注解的引入使得返回JSON或其他非HTML响应变得更加便捷。 在安全方面,Spring Security 3.1.x为Spring应用提供了强大的安全框架,包括认证、授权和访问控制等功能。它可以与...
在依赖管理方面,Spring MVC 4.0引入了对Servlet 3.1的全面支持,这简化了部署配置,因为开发者可以使用注解来定义Servlet、Filter和Listener,无需传统的web.xml配置文件。此外,这个版本还支持异步处理,通过`@...
- **JsonMessageConverter**:用于JSON格式的数据交换。 - **XmlMessageConverter**:用于XML格式的数据交换。 ### 5. REST API Discoverability and HATEOAS #### 5.1 概览 为了让客户端能够发现REST API的功能,...
此外,`@ResponseBody`注解允许将方法返回的对象直接转换为HTTP响应体,极大地简化了JSON或XML的返回。 在依赖注入方面,SpringMVC 3.1改进了自动扫描和组件配置,使得开发者可以更轻松地管理控制器和其他服务类。`...
Spring 4进一步优化了对RESTful服务的支持,提供了`@RestController`注解,将传统的`@Controller`与`@ResponseBody`结合,简化了REST服务的定义。此外,`@ExceptionHandler`注解可以帮助处理全局异常,提高代码的可...
- **生产者、消费者请求限定**:使用@RequestBody、@ResponseBody等注解来处理JSON、XML等不同格式的数据。 ##### 4.2 SpringMVC3.1新特性 - **新特性概述**:SpringMVC 3.1版本增加了一些新的特性,如支持使用HTTP...
例如,如果一个控制器方法需要返回一段JSON数据,只需简单地加上`@ResponseBody`注解即可: ```java @RequestMapping(value = "/api/data", method = RequestMethod.GET) @ResponseBody public Map, Object> get...
- 返回JSON响应,通常结合`@ResponseBody`和`@JsonAutoDetect`等注解。 6. **异常处理**: - 可以自定义异常处理器,使用`@ControllerAdvice`和`@ExceptionHandler`注解来捕获并处理特定类型的异常。 - 还可以...
- **处理返回值**:Spring MVC支持直接返回字符串类型的结果,这些结果会被自动转换成JSON格式发送给客户端。 ```java @ResponseBody public String submit(...) { return "{\"status\":\"success\"}"; } ```...
- **AspectJ中使用的注解**:@Aspect、@Pointcut、@Around等。 - **execution表达式的使用**:定义切入点,指定切面所作用的目标对象的方法。 **8.4 AOP案例_基于schema** 通过配置文件来定义切面和通知。 **8.5 ...
利用`@RequestBody`和`@ResponseBody`注解进行JSON数据的读写。 ##### 6.5 RESTful支持 使用`@GetMapping`、`@PostMapping`等注解实现RESTful风格的服务。 ##### 6.6 拦截器 自定义拦截器实现请求前后的处理逻辑...
- **实现方式**:使用`@ResponseBody`注解将Java对象序列化为JSON字符串,或使用`@RequestBody`注解将JSON字符串反序列化为Java对象。 ##### 6.5 RESTful支持 - **实现方式**:通过`@RequestMapping`指定HTTP方法和...
3.4 JSON序列化与反序列化:Spring Boot默认使用Jackson库处理JSON数据,通过`@RequestBody`和`@ResponseBody`注解实现数据的自动转换。 四、Spring Boot中的安全控制 4.1 Spring Security:Spring Boot集成了...
关闭Spring MVC DispatcherServlet vii. 65.7. 关闭默认的MVC配置 Spring Boot参考指南 7 viii. 65.8. 自定义ViewResolvers v. 66. 日志 i. 66.1. 配置Logback ii. 66.2. 配置Log4j i. 66.2.1. 使用YAML或JSON配置...