`

使用@RequestBody, @ResponseBody实现前台JSON与对象(或泛型对象容器)的绑定

阅读更多

1. JQuery发送Ajax请求
var array = [{id: '01', name: 'name01'}, {id: '02', name: 'name02'}];
$.ajax({
    type: "PUT",
    url: '/WebTest/user/create/batch',
    data: JSON.stringify(array),
    contentType: 'application/json',
    dataType: 'json',
    success: function() {
        console.log('get response');
    },
});

发送到后台的请求如图:


 

2. 此处略去${servletName}-servlet.xml中的一些常规配置,如

<mvc:annotation-driven />
<context:component-scan base-package="example" />

 

3. 我的目标是在SpringMVC的Controller层直接用以下代码,让JSON数据直接绑定到指定泛型的容器中

 

package example.controller;

@Controller
@RequestMapping("/user")
public class UserController {

    // 省略logger等初始化
   
    @RequestMapping(value = "/create/batch", method = RequestMethod.PUT)
    public String batchCreate(Model model, @RequestBody List<User> list) throws InterruptedException, IOException {
        logger.debug(list.size());
        return index(model);
    }
}

 

好了,直接运行代码,会遇到“415 Unsupported Media Type”的错误,这是因为还需要其他的配置和依赖包。

 

4. 解决方案:${servletName}-servlet.xml中添加

 

<bean class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter">
        <property name="messageConverters">
            <list>
                <bean class="org.springframework.http.converter.json.MappingJacksonHttpMessageConverter"/>
            </list>
        </property>
    </bean>

这个adapter会自动根据contentType('application/json') 来处理JSON。

 

最后在pom中添加相关依赖,

<dependency>
    <groupId>org.codehaus.jackson</groupId>
    <artifactId>jackson-mapper-asl</artifactId>
    <version>1.9.13</version>
</dependency>

 

====第4点 是SpringMVC 3.1.2之前的配置,3.1.2 and later version are more easier to achieve that====

Spring 3.1.2 adds support for automatic conversion to JSON via Jackson 2.x. There isn’t much that you need to do to make it work. You need to be using at least Spring 3.1.2 to have Jackson 2.x support. Add the Jackson 2.x dependencies.

 

from Spring 3.2.1 version is now incompatible to Jackson FasterXML 2.1.x versions. For Jackson 2, please use MappingJackson2HttpMessageConverter instead of MappingJacksonHttpMessageConverter.

 

按照Spring官方文档所述,MappingJackson2HttpMessageConverter不需要显式配置,只要classpath中有Jackson 2的依赖即可,即:

 

        <dependency>
            <groupId>com.fasterxml.jackson.core</groupId>
            <artifactId>jackson-databind</artifactId>
            <version>2.5.0</version>
        </dependency>

 

所以xxx-servlet.xml中只需要<mvc:annotation-driven/>即可。

 

=====Notes:=====

Jackson 2的group id换做fasterxml,不再是Jackson 1的codehaus

"Jackson has a new namescape since version 2.0.0: com.fasterxml.jackson
while it used to be under org.codehaus.jackson until version 1.9.9"

 

More more NOTE: If you only include the jackson-core artifact and do not include the jackson-databind artifact, your spring requests will return HTTP 406 errors and there will be no indication of what the real problem is.

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

相关推荐

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

    本篇文章将详细解释这两个注解的工作原理、使用场景以及如何实现Java对象与XML/JSON数据的自动转换。 ### 1. @RequestBody 注解 `@RequestBody` 用于方法参数前,表示该参数将会从HTTP请求的主体(通常为POST或PUT...

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

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

    Spring 注解学习手札(七) 补遗——@ResponseBody,@RequestBody,@PathVariable

    例如,你可以结合使用`@RequestBody`和`@ResponseBody`来创建一个接收JSON数据并返回JSON响应的方法,同时利用`@PathVariable`处理URL中的动态部分,实现灵活的路由控制。 在实际开发中,我们还需要了解如何配置...

    浅析@ReponseBody和@RequestBody注解

    浅析@ReponseBody和@RequestBody注解 @ReponseBody和@RequestBody是Spring MVC框架中两个重要的注解,分别用于处理HTTP请求和响应体。下面我们将详细分析这两个注解的作用和Spring MVC内部是如何对他们进行解析的。...

    @ResponseBody 和 @RequestBody 注解的区别

    在这种情况下,客户端将数据以 JSON 或 XML 格式发送到服务器端,而服务器端使用 @RequestBody 注解将请求正文转换为对应的对象。 以下是一个使用 @RequestBody 注解的示例: ```java @RequestMapping(value = ...

    详解使用@RequestBody取POST方式的json字符串

    本文将深入探讨如何使用`@RequestBody`来接收POST方式的JSON字符串。 首先,`@RequestBody`是Spring MVC中的一个注解,它的作用是从HTTP请求的主体中获取数据,并尝试将其转换为指定类型的对象。在处理JSON数据时,...

    如何解决@RequestParam无法接收vue+axios传递json数据(csdn)————程序.pdf

    为了解决这个问题,我们需要修改Controller的方法,使用@RequestBody注解来接收JSON数据: ```java @RequestMapping(value = "/getToken", method = RequestMethod.POST, consumes = "application/json;charset=UTF-...

    快速解决SpringMVC @RequestBody 用map接收请求参数的问题

    这样,我们就可以轻易地将一个对象或者 List 传到 Java 端,并使用 @RequestBody 注解绑定对象或者 List。 使用 @RequestBody 注解可以快速解决 SpringMVC 中的请求参数接收问题,但是需要注意一些细节,如使用 @...

    springMvc注解之 ResponseBody和 RequestBody.docx

    当我们在控制器方法的参数前加上`@RequestBody`时,Spring MVC会尝试将请求体中的内容(通常是以JSON格式)转换为与参数类型匹配的对象。例如,在示例中,如果前端发送了一个嵌套的JSON对象,`@RequestBody Map, ...

    springMVC技术概述

    springMVC相关技术配置使用注解的HandlerMapping和HandlerAdapter使用&lt;mvc:annotation-driver&gt; 不过springBoot已经省略了这些配置 配置使用注解的Handler和Service...@RequestBody,@ResponseBody--json与java对象转换

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

    在Spring MVC中,`@RequestBody`注解是用于将HTTP请求体中的数据转换为Java对象的,特别适用于处理JSON或XML格式的...这样,`@RequestBody`注解就能正确地将JSON数据转换为Java对象,从而实现RESTful API的高效交互。

    springMvc注解之@ResponseBody和@RequestBody详解

    Spring MVC注解之@ResponseBody和@RequestBody详解 在Spring MVC框架中,@ResponseBody和@RequestBody是两个非常重要的注解,它们分别用于处理HTTP请求响应体和请求体的序列化和反序列化。下面,我们将详细介绍这两...

    Spring MVC打印@RequestBody、@Response日志的方法

    Spring MVC框架提供了强大的日志记录功能,对于日志记录的实现,Spring MVC提供了多种方式,本文将主要介绍如何使用RequestBodyAdvisor和ResponseBodyAdvisor来实现对@RequestBody和@Response的日志输出。...

    springMVC的 RequestBody和 ResponseBody和RequestParam.docx

    ### Spring MVC 中的 RequestBody 和 ResponseBody 及 RequestParam 使用详解 #### 一、Spring MVC 概述 Spring MVC 是 Spring Framework 的一部分,它提供了一种清晰的模型—视图—控制器架构实现,用于构建 Web ...

    springmvc实现json交互-requestBody和responseBody

    本文将深入探讨如何使用`@RequestBody`和`@ResponseBody`注解来实现JSON的处理。 首先,JSON作为一种轻量级的数据交换格式,其简单性和易于解析的特性使得它在接口调用和HTML页面中被广泛使用。例如,在Web服务接口...

    @Response和@Request

    `@RequestBody`用于将请求体的数据转换为Java对象,而`@ResponseBody`则将Java对象转换为响应体的数据。配合`HttpMessageConverter`和适当的配置,我们可以方便地处理各种数据格式,如JSON、XML等。

    最新版本 jackson 2.8.2 jar与spring 4.x @ResponseBody配合使用

    标题提到的"最新版本 Jackson 2.8.2 jar与Spring 4.x @ResponseBody配合使用"涉及到的关键知识点包括Jackson的三个核心模块,以及如何在Spring MVC中利用这些模块实现RESTful API的数据响应。 1. **Jackson核心模块...

    对json格式的数据进行封装和转化,@responsebody注解所需的jar包JSON.rar

    描述中提到的"springmvc进行Jason数据封装转化时可以即使用也是@responsebody",指的是在Spring MVC的控制器(Controller)中,我们可以使用`@ResponseBody`注解配合Jackson库,实现将Java对象直接转换为JSON格式的...

    SpringMVC环境搭建

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

Global site tag (gtag.js) - Google Analytics