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

SpringMVC @RequestBody RestTempla问题:Unrecognized field , not marked as ignorable

 
阅读更多

在使用Json传值并且使用@RequestBody注解的时候需要注意一些问题:

 

  1. 一个方法中只能有一个@RequestBody注解。
  2. 默认情况下@RequestBody标注的对象必须包含前台传来的所有字段。

 

第一条容易理解,因为RequestBody就是request的inputStream,这个流在第一次使用该注解后会关闭,后面的都会报错(stream closed)。

 

第二条如果没有包含前台传来的字段,就会报错:Unrecognized field xxx , not marked as ignorable,这是因为MappingJacksonHttpMessageConverter默认要求必须存在相应的字段。如果没有前台传来的某个字段,就会报错。。

 

解决方法有很多,可以增加一个字段来接收前台传来的这个值,如果存在多个字段,这种方式很不好(就算一个字段,如果没用,新增字段也不好)。

 

或者在前台往后台传值的时候,去掉无用的字段。这样还能减少网络传输的大小。

 

还有一些方法,这些方法主要是使用Jackson提供的json注解。

 

@JsonIgnore注解用来忽略某些字段,可以用在Field或者Getter方法上,用在Setter方法时,和Filed效果一样。这个注解只能用在POJO存在的字段要忽略的情况,不能满足现在需要的情况。

 

@JsonIgnoreProperties(ignoreUnknown = true),将这个注解写在类上之后,就会忽略类中不存在的字段,可以满足当前的需要。这个注解还可以指定要忽略的字段。使用方法如下:

@JsonIgnoreProperties({ "internalId", "secretKey" })

指定的字段不会被序列化和反序列化。

分享到:
评论
1 楼 usenrong 2014-11-29  
jackson中的@JsonBackReference和@JsonManagedReference,以及@JsonIgnore均是为了解决对象中存在双向引用导致的无限递归(infinite recursion)问题。这些标注均可用在属性或对应的get、set方法中。

@JsonBackReference和@JsonManagedReference:这两个标注通常配对使用,通常用在父子关系中。@JsonBackReference标注的属性在序列化(serialization,即将对象转换为json数据)时,会被忽略(即结果中的json数据不包含该属性的内容)。@JsonManagedReference标注的属性则会被序列化。在序列化时,@JsonBackReference的作用相当于@JsonIgnore,此时可以没有@JsonManagedReference。但在反序列化(deserialization,即json数据转换为对象)时,如果没有@JsonManagedReference,则不会自动注入@JsonBackReference标注的属性(被忽略的父或子);如果有@JsonManagedReference,则会自动注入自动注入@JsonBackReference标注的属性。

@JsonIgnore:直接忽略某个属性,以断开无限递归,序列化或反序列化均忽略。当然如果标注在get、set方法中,则可以分开控制,序列化对应的是get方法,反序列化对应的是set方法。在父子关系中,当反序列化时,@JsonIgnore不会自动注入被忽略的属性值(父或子),这是它跟@JsonBackReference和@JsonManagedReference最大的区别。

相关推荐

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

    快速解决SpringMVC @RequestBody 用map接收请求参数的问题 在 SpringMVC 中,使用 @RequestBody 注解可以将请求体中的数据转换为 Java 对象,但是在使用 map 接收请求参数时,经常会遇到一些问题。本文将讨论如何...

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

    public User createUser(@RequestBody CreateUserRequest request) { // 创建用户并保存到数据库 User user = new User(request.getName(), request.getEmail()); userService.save(user); return user; } @...

    详解SpringMVC @RequestBody接收Json对象字符串

    本文主要介绍如何在SpringMVC中使用@RequestBody注解来接收JSON对象字符串。 首先,前端页面向服务器发送数据通常有两种格式:form格式和JSON格式。Form格式提交的数据通常由键值对组成,其格式通常为k=v&k=v,这种...

    Java后台服务器Maven+SpringMVC+Ajax+@RequestBody+Json传输

    本项目"Java后台服务器Maven+SpringMVC+Ajax+@RequestBody+Json传输"就是一个很好的示例,它展示了如何利用这些技术进行前后端的数据交互。下面我们将详细探讨这些知识点。 首先,`Maven`是Java项目管理工具,它...

    Spring MVC参数校验详解(关于`@RequestBody`返回`400`)

    主要介绍了Spring MVC参数校验的相关资料,主要是针对`@RequestBody`返回`400`的问题,文中通过示例代码介绍的非常详细,对大家具有一定的参考学习价值,需要的朋友们下面跟着小编来一起学习学习吧。

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

    然而,在尝试使用`@RequestBody`注解并调用服务时遇到了问题。开发者首先怀疑可能是Spring没有正确加载`MappingJackson2HttpMessageConverter`,或者加载后没有正常工作。为了验证这个假设,他们尝试自定义配置以...

    springMvc注解之@ResponseBody和@RequestBody详解

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

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

    为了解决这个问题,我们需要使用RequestBodyAdvisor和ResponseBodyAdvisor来实现对@RequestBody和@Response的日志输出。RequestBodyAdvisor可以获取到解析后的Controller方法参数对象,而ResponseBodyAdvisor可以...

    springMVC的 RequestBody和 ResponseBody和RequestParam.docx

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

    springMvc注解之 ResponseBody和 RequestBody.docx

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

    基于SSM的高校学生综合测评管理系统 技术栈:Spring,SpringMVC,MyBatis,Vue 数据库:MySQL

    基于SSM的高校学生综合测评管理系统 技术栈:Spring,SpringMVC,MyBatis,Vue 数据库:MySQL 角色:管理员和学生 功能: 首页 个人中心 班级管理 学生管理 课程信息管理 综合数据管理

    SpringMVC环境搭建

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

    使用SpringMVC的@Validated注解验证的实现

    "使用SpringMVC的@Validated注解验证的实现" @Validated注解是SpringMVC中的一种验证注解,用于验证 Bean 中的属性是否满足一定的条件。该注解可以与其他验证注解如 @NotNull、@Size 等结合使用,实现复杂的验证...

    springmvc实现json交互-requestBody和responseBody

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

    springMVC 注解版

    **SpringMVC注解版详解** SpringMVC是Spring框架的一部分,主要负责处理Web应用程序的请求和响应。在SpringMVC中,注解的使用极大地简化了开发过程,减少了XML配置,使得代码更加简洁易懂。这篇内容将深入探讨...

    Http请求传参SpringMVC接收参数详细解析

    本文将深入解析SpringMVC如何处理GET和POST请求中的参数,以及如何使用@RequestParam和@RequestBody注解。 1. GET请求 GET请求通常用于获取资源,其参数直接附加在URL路径后面,以键值对的形式存在。例如,`/api/...

    springMVC+Spring+Mybatis框架 : 简易博客系统.zip

    说明: 本项目是为springMVC+spring+mybatis的集成项目,使用maven进行项目管理 版本说明:spring3.2 mybatis3.2 mysql5.6 相关接口: 用户接口+角色权限接口+博客接口。

    SpringMVC精品资源--教程源码-springboot部分SpringMVC常用的注解; SpringBoot.zip

    SpringMVC是Spring框架的一部分,专门用于处理Web应用程序的请求-响应模型。它是一个轻量级的、基于注解的控制器模型,简化了Java Web开发。在Spring Boot中,SpringMVC被集成并进一步优化,使得创建独立运行的、...

    SpringMVC @ControllerAdvice使用场景

    主要介绍了SpringMVC @ControllerAdvice使用场景,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下

    SpringMvc注解详解

    - **@RequestBody**: 用于将请求体的内容转换为方法参数。 - **@ResponseBody**: 将方法的返回值直接写入 HTTP 响应体,通常用于 JSON 或 XML 数据的传输。 - **@ExceptionHandler**: 处理特定异常,提供统一的...

Global site tag (gtag.js) - Google Analytics