`
yjflfliulei
  • 浏览: 79340 次
  • 性别: Icon_minigender_1
  • 来自: 南京
社区版块
存档分类
最新评论

spring MVC 3.1 注解:@ResponseBody 返回json数据

阅读更多

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之后使用RequestMappingHandlerMappingRequestMappingHandlerAdapter

替代了原有的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;
 

 

分享到:
评论
6 楼 少年中国 2014-04-03  
哥,写的太乱了点吧,看着真累,不过还是辛苦了
5 楼 进击的巨人 2014-02-04  
原来是我没写命名空间p
进击的巨人 写道
 <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>


跟博主一样,spring版本是3.2.5,报这个错
Caused by: org.xml.sax.SAXParseException: The prefix "p" for attribute "p:supportedMediaTypes" associated with an element type "bean" is not bound.

4 楼 进击的巨人 2014-02-03  
 <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>


跟博主一样,spring版本是3.2.5,报这个错
Caused by: org.xml.sax.SAXParseException: The prefix "p" for attribute "p:supportedMediaTypes" associated with an element type "bean" is not bound.
3 楼 itsnothing 2013-10-27  
    如果可以,我想给32个赞。    问题得到了解决,这Spring版本差异还是挺大的啊。
2 楼 风间苍月 2013-07-08  
不错啊,这问题找了好久才解决。真心感谢
1 楼 _money 2013-03-26  

相关推荐

    spring3.1官方手册英文版

    此外,`@ResponseBody`和`@RequestBody`注解也使得JSON和其他格式的数据交换更为方便。 7. **SpEL(Spring Expression Language)** SpEL是一种强大的表达式语言,用于在运行时查询和操作对象图。在Spring 3.1中,...

    SpringMVC返回json数据的三种方式

    在Spring MVC框架中,返回JSON数据是常见的操作,特别是在构建RESTful API时。JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,易于人阅读和编写,同时也易于机器解析和生成。以下将详细介绍Spring ...

    Spring MVC面试宝典1.pdf

    - 将视图数据返回给前端展示。 ##### 1.5 SpringMVC的控制器单例模式,怎么解决线程安全问题? 在SpringMVC中,控制器通常被定义为单例模式,这意味着所有请求都共享同一个控制器实例。因此,需要注意解决线程安全...

    SSH框架中SpringMVC

    Spring MVC 支持 JSON 数据格式的输入和输出,通过 @ResponseBody 注解可以将方法返回的对象直接转换为 JSON,并发送回客户端。同时,使用 @RequestBody 注解可以从 JSON 请求体中解析数据。 七、文件上传 Spring ...

    spring3.1.4 jar集合

    `@ResponseBody`和`@ControllerAdvice`注解的引入使得返回JSON或其他非HTML响应变得更加便捷。 在安全方面,Spring Security 3.1.x为Spring应用提供了强大的安全框架,包括认证、授权和访问控制等功能。它可以与...

    springMVC4.0常用jar包

    在依赖管理方面,Spring MVC 4.0引入了对Servlet 3.1的全面支持,这简化了部署配置,因为开发者可以使用注解来定义Servlet、Filter和Listener,无需传统的web.xml配置文件。此外,这个版本还支持异步处理,通过`@...

    Building+a+REST+API+with+Spring

    - **JsonMessageConverter**:用于JSON格式的数据交换。 - **XmlMessageConverter**:用于XML格式的数据交换。 ### 5. REST API Discoverability and HATEOAS #### 5.1 概览 为了让客户端能够发现REST API的功能,...

    SpringMVC 3.1 体验

    此外,`@ResponseBody`注解允许将方法返回的对象直接转换为HTTP响应体,极大地简化了JSON或XML的返回。 在依赖注入方面,SpringMVC 3.1改进了自动扫描和组件配置,使得开发者可以更轻松地管理控制器和其他服务类。`...

    pring4新特性之web开发增强共3页.pdf.zip

    Spring 4进一步优化了对RESTful服务的支持,提供了`@RestController`注解,将传统的`@Controller`与`@ResponseBody`结合,简化了REST服务的定义。此外,`@ExceptionHandler`注解可以帮助处理全局异常,提高代码的可...

    跟我学SpringMVC

    - **生产者、消费者请求限定**:使用@RequestBody、@ResponseBody等注解来处理JSON、XML等不同格式的数据。 ##### 4.2 SpringMVC3.1新特性 - **新特性概述**:SpringMVC 3.1版本增加了一些新的特性,如支持使用HTTP...

    springMVC学习笔记

    例如,如果一个控制器方法需要返回一段JSON数据,只需简单地加上`@ResponseBody`注解即可: ```java @RequestMapping(value = "/api/data", method = RequestMethod.GET) @ResponseBody public Map, Object&gt; get...

    springMVC学习--基本的几个例子

    - 返回JSON响应,通常结合`@ResponseBody`和`@JsonAutoDetect`等注解。 6. **异常处理**: - 可以自定义异常处理器,使用`@ControllerAdvice`和`@ExceptionHandler`注解来捕获并处理特定类型的异常。 - 还可以...

    EXT异步提交FORM表单

    - **处理返回值**:Spring MVC支持直接返回字符串类型的结果,这些结果会被自动转换成JSON格式发送给客户端。 ```java @ResponseBody public String submit(...) { return "{\"status\":\"success\"}"; } ```...

    SSM集成应用

    - **AspectJ中使用的注解**:@Aspect、@Pointcut、@Around等。 - **execution表达式的使用**:定义切入点,指定切面所作用的目标对象的方法。 **8.4 AOP案例_基于schema** 通过配置文件来定义切面和通知。 **8.5 ...

    SpringMVC学习课堂笔记

    利用`@RequestBody`和`@ResponseBody`注解进行JSON数据的读写。 ##### 6.5 RESTful支持 使用`@GetMapping`、`@PostMapping`等注解实现RESTful风格的服务。 ##### 6.6 拦截器 自定义拦截器实现请求前后的处理逻辑...

    springmvc课堂笔记

    - **实现方式**:使用`@ResponseBody`注解将Java对象序列化为JSON字符串,或使用`@RequestBody`注解将JSON字符串反序列化为Java对象。 ##### 6.5 RESTful支持 - **实现方式**:通过`@RequestMapping`指定HTTP方法和...

    springBoot_Rest

    3.4 JSON序列化与反序列化:Spring Boot默认使用Jackson库处理JSON数据,通过`@RequestBody`和`@ResponseBody`注解实现数据的自动转换。 四、Spring Boot中的安全控制 4.1 Spring Security:Spring Boot集成了...

    springboot参考指南

    关闭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配置...

Global site tag (gtag.js) - Google Analytics