`

SpringMVC中使用@RequestBody,@ResponseBody注解实现Java对象和XML/JSON数据自动转换(下)

阅读更多

        上一篇分析了Spring中是如何通过使用@ResponseBody注解,实现自动转换Java对象为XML,JSON数据到Reponse中。

        接下来看看如果request中包含了XML或者JSON数据,反过来,如何来通过@RequestBody注解来自动转换为Java对象。

        配合@RequestBody注解,以及HTTP Request Header中的Content-Type属性,HTTP Request Body中包含的XML或者JSON数据可以自动被转换成对应的Java对象。

1).首先在controller中添加handlermapping

/**
 * 根据request header中的Content-Type自动转换XML/JSON->UserDTOX对象
 * 根据request header中的Accept自动选择返回XML or JSON
 */
@ResponseBody
@RequestMapping(value="/createUser", method = RequestMethod.POST)
public UserDTOX createUser(@RequestBody UserDTOX userDTOX) {
	logger.debug("creating a UserDTO:[{}]", userDTOX);
	return new UserDTOX("Hi " + userDTOX.getName(), userDTOX.getAge() + 1);
}

2).运行以下两个测试函数

@Test
public void testJsonRequestResponse() throws IOException, URISyntaxException {
	
	String url = "http://localhost:8080/SpringMVC/createUser";
	HttpHeaders requestHeaders = new HttpHeaders();
	requestHeaders.set("Accept", "application/json");
	requestHeaders.set("Content-Type", "application/json");

	String jsonStr = "{\"name\":\"Jack\",\"age\":16}";

	RestTemplate restTemplate = new RestTemplate();
	HttpEntity<String> httpEntity = new HttpEntity<String>(jsonStr, requestHeaders);
	String jsonData = restTemplate.postForObject(url, httpEntity, String.class);

	System.out.println(jsonData);
}

@Test
public void testXmlRequestResponse() throws IOException, URISyntaxException {
	
	String url = "http://localhost:8080/SpringMVC/createUser";
	HttpHeaders requestHeaders = new HttpHeaders();
	requestHeaders.set("Accept", "application/xml");
	requestHeaders.set("Content-Type", "application/xml");

	String xmlStr = "<userDTOX><name>Jack</name><age>16</age></userDTOX>";

	RestTemplate restTemplate = new RestTemplate();
	HttpEntity<String> httpEntity = new HttpEntity<String>(xmlStr, requestHeaders);
	String xmlData = restTemplate.postForObject(url, httpEntity, String.class);

	System.out.println(xmlData);
}

3).我们甚至可以任意组合请求和应答中的XML/JSON。比如Request=XML,Response=JSON

@Test
public void testXmlRequestJsonResponse() throws IOException, URISyntaxException {
		String url = "http://localhost:8080/SpringMVC/createUser";
		HttpHeaders requestHeaders = new HttpHeaders();
		requestHeaders.set("Accept", "application/json");
		requestHeaders.set("Content-Type", "application/xml");
		
		String xmlStr = "<userDTOX><name>Jack</name><age>16</age></userDTOX>";

		RestTemplate restTemplate = new RestTemplate();
		HttpEntity<String> httpEntity = new HttpEntity<String>(xmlStr, requestHeaders);
		String jsonData = restTemplate.postForObject(url, httpEntity, String.class);

		System.out.println(jsonData);
}

        类似上一篇中的分析,最关键的处理在AbstractMessageConverterMethodArgumentResolver.readWithMessageConverters()。它会根据request header中的Content-Type属性来选择合适的message converter。


        另外,如果不想使用<mvc:annotation-driven/>中默认的RequestMappingHandlerAdapter的话,我们可以在重新定义这个bean,spring会覆盖掉默认的RequestMappingHandlerAdapter。

<bean class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter">
  <property name="messageConverters">
    <list>
      <bean class="org.springframework.http.converter.ByteArrayHttpMessageConverter"/>
      <bean class="org.springframework.http.converter.StringHttpMessageConverter"/>
      <bean class="org.springframework.http.converter.ResourceHttpMessageConverter"/>
    </list>
  </property>
</bean>

        或者如果只想换messageConverters的话。

<mvc:annotation-driven>
  <mvc:message-converters>
    <bean class="org.example.MyHttpMessageConverter"/>
    <bean class="org.example.MyOtherHttpMessageConverter"/>
  </mvc:message-converters>
</mvc:annotation-driven>

 

文章来源:http://blog.csdn.net/fw0124/article/details/48312317

  • 大小: 71.9 KB
分享到:
评论

相关推荐

    SpringMVC中使用@RequestBody,@ResponseBody注解实现Java对象和XML/JSON数据自动转换(上)

    这篇博客将深入探讨这两个注解的工作原理以及如何利用它们实现在Java对象与XML或JSON数据之间的自动转换。 `@RequestBody` 注解用于方法参数前,表示该参数将会从HTTP请求体中读取数据并进行绑定。这通常发生在POST...

    springMvc注解之@ResponseBody和@RequestBody详解

    例如,在控制器中,我们可以使用@ResponseBody注解来将方法的返回值序列化为JSON格式。 ```java @RequestMapping("/testResponseBody") @ResponseBody public String testResponseBody() { return "Hello, World!";...

    SpringMVC restful 注解之@RequestBody进行json与object转换

    在Spring MVC中,`@RequestBody`注解是用于将HTTP请求体中的数据转换为Java对象的,特别适用于处理JSON或XML格式的数据。当控制器方法接收POST、PUT等带有请求体的HTTP请求时,`@RequestBody`可以帮助我们将接收到的...

    springMVC的 RequestBody和 ResponseBody和RequestParam.docx

    在 Spring MVC 中,请求参数的处理非常灵活,可以使用 `@RequestParam`、`@RequestBody` 和 `@ResponseBody` 等注解进行数据绑定和响应体的控制。 #### 二、`@RequestBody` `@RequestBody` 注解通常用于控制器中的...

    springmvc对json支持

    总结起来,Spring MVC对JSON的支持主要依赖于Jackson库,通过`@ResponseBody`和`@RequestBody`注解实现数据交换,配合注解进行类型转换控制,同时允许开发者自定义序列化和反序列化行为,以及配置错误处理机制。...

    springMVC json格式转换demo

    在Spring MVC中,为了将对象转换为JSON,我们需要使用`@RequestBody`和`@ResponseBody`注解。`@RequestBody`用于将HTTP请求体中的JSON数据转换为Java对象,而`@ResponseBody`则将Java对象转换为HTTP响应体的JSON数据...

    SpringMVC中Json数据格式转换

    当服务器接收到这个请求后,通过@RequestBody注解自动将JSON数据转换为Items对象,并在返回时,通过@ResponseBody注解将对象转换为JSON格式的响应。 为了保证知识点的准确性和完整性,需要注意的是,文档中提到的...

    SpringMVC中使用JSON传递数据时用的jar包

    3. **JSON序列化与反序列化**:在Spring MVC中,你可以通过使用`@RequestBody`和`@ResponseBody`注解来实现JSON数据的传递。`@RequestBody`用于将HTTP请求体中的JSON数据转换为Java对象,而`@ResponseBody`则将方法...

    SpringMVC JSON格式的读取和显示

    `@RequestBody`和`@ResponseBody`使得JSON数据与Java对象之间的转换变得简单,而Jackson库提供了丰富的功能来满足各种序列化需求。通过理解这些核心概念和实践,你就能在Spring MVC中有效地处理JSON格式的读取和显示...

    SpringMVC中解决@ResponseBody注解返回中文乱码问题

    在SpringMVC框架中,`@ResponseBody`注解用于将方法的返回值直接转换为HTTP响应体,通常用于处理JSON或XML格式的数据。然而,当返回的字符串中包含中文字符时,如果没有正确设置编码,就可能导致乱码问题。本文将...

    springmvc-json-lib.rar

    在SpringMVC中,我们可以使用Jackson的`@ResponseBody`注解,将控制器方法的返回值自动转换为JSON格式。同时,通过`@RequestBody`注解,我们可以将HTTP请求体中的JSON数据自动映射到方法参数中。 配置Jackson库需要...

    springMVC+json.zip_JSON_myeclipse_springmvc_数据传递

    - Controller方法接收参数,SpringMVC会自动将JSON数据转化为Java对象,通过`@RequestBody`注解注入到方法参数中。 - Controller处理业务逻辑后,可能需要返回JSON数据。通过`@ResponseBody`注解,SpringMVC会调用...

    Springmvc 4.x利用@ResponseBody返回Json数据的方法

    实际开发中,常常需要返回一个对象,这时Spring MVC会自动使用配置好的消息转换器来将Java对象序列化为JSON字符串,然后返回给客户端。 ### 控制器层与前端交互示例 ```java @RequestMapping("House/ClassManager/...

    SpringMVC环境搭建

    本教程将指导你如何搭建一个非Maven的SpringMVC项目,主要关注@RequestBody和@ResponseBody的配置。 首先,让我们了解SpringMVC的基本结构。一个标准的SpringMVC项目通常包含以下几个关键部分: 1. **src目录**:...

    springMVC+ajax+json

    然后,使用@RequestBody或@ResponseBody注解将HTTP请求体或响应体绑定到JSON对象。 例如,一个简单的Ajax请求可能如下: ```javascript $.ajax({ url: '/api/data', type: 'GET', dataType: 'json', success: ...

    SpringMVC框架中传递JSON数据时前台报406错误解决办法

    在这个例子中,`@ResponseBody`注解告诉Spring MVC将方法返回的对象转换为JSON,`produces = "application/json"`则设置了Content-Type。 如果以上步骤都已完成,但仍遇到406错误,可能的原因包括但不限于:前端...

    完整版 Java开发实训课程系列-SpringMVC框架技术教程 第7章 文件上传和json数据交互 (共30页).pptx

    在Controller中,使用`@RequestBody`将JSON字符串转换为Java对象,`@ResponseBody`将Java对象转换为JSON响应。 本课程通过实际的代码示例和项目实践,帮助学习者掌握如何在SpringMVC中实现文件上传和JSON数据交互,...

    springmvc加入json支持需要的jar包

    3. **使用注解**:在控制器方法上使用`@RequestBody`和`@ResponseBody`注解来处理JSON请求和响应。`@RequestBody`用于将JSON请求体转换为Java对象,而`@ResponseBody`则将方法的返回值转换为JSON响应。 4. **测试**...

    SpringMVC例子注解

    它可以将JSON或XML数据转换为Java对象。 7. `@ResponseBody`: 标记在方法返回值上,表示该方法的返回结果应该直接写入HTTP响应体,而不是作为一个视图解析。这常用于返回JSON或XML数据。 8. `@Autowired`: Spring...

Global site tag (gtag.js) - Google Analytics