SpringBoot@RequestBody传参json的属性在接收实体中不存在异常解决

当在SpringBoot项目中使用@RequestBody接收JSON参数时,若JSON包含实体类未定义的字段,将引发HttpMessageNotReadableException。本文介绍如何通过在实体类上添加@JsonIgnoreProperties注解来避免此问题。
springboot中使用@RequestBody获取传参实体时,如果传参json的属性在接收实体中不存在会报错如下

org.springframework.http.converter.HttpMessageNotReadableException: JSON parse error: Unrecognized field \"dishName2\"

 

通过在实体类上增加注解

@JsonIgnoreProperties(ignoreUnknown = true)

可以解决问题。

 

### Spring Boot 前后端传参方法 #### 路径参数递 (Path Parameters) 路径参数是指前端将参数作为URL路径的一部分递给服务器,而后端则通过`@PathVariable`注解来接收这些参数。这种方式适用于资源定位场景。 例如: - **前端请求示例** `GET /api/users/123` - **后端处理示例** ```java @GetMapping("/api/users/{id}") public String getUserById(@PathVariable("id") Long id) { // 处理逻辑 return "success"; } ``` 此代码片段展示了如何定义一个接受ID作为路径变量的方法[^3]。 #### 查询参数递 (@RequestParam) 查询参数通常附加在URL后面,形式为键值对。对于GET请求而言,这是最常见的参数递方式之一;而对于POST请求来说,则可以用来接收来自HTML表单的数据。 - **前端请求示例** `http://localhost:8080/user?id=1` - **后端处理示例** ```java @PostMapping("/user") public ResponseEntity<String> createUser( @RequestParam(value="name", required=false, defaultValue="John Doe") String name, @RequestParam(value="age", required=true) Integer age){ User user = new User(name, age); userService.save(user); return ResponseEntity.ok("User created successfully"); } ``` 这里使用了@RequestParam注解指定要从HTTP请求中提取哪些参数,并允许设置默认值和必填属性[^4]。 #### 表单数据递 (@ModelAttribute 或者直接使用实体类) 当涉及到复杂的对象结构时,可以直接让Spring MVC自动绑定整个对象到控制器方法中的参数上。这特别适合于处理带有多个字段的Web表单提交情况。 - **前端表单示例** ```html <form action="/submitForm" method="post"> <input type="text" name="username"/> <input type="password" name="password"/> </form> ``` - **后端处理示例** ```java @PostMapping("/submitForm") public ModelAndView submitLoginForm(@ModelAttribute LoginForm loginForm){ System.out.println(loginForm.getUsername()); System.out.println(loginForm.getPassword()); return new ModelAndView("redirect:/home"); } // 或者更简洁的方式是直接使用实体类 @PostMapping("/createUser") public String createNewUser(User newUser){ userRepository.save(newUser); return "redirect:/users"; } ``` 上述例子显示了两种同的方法来接收并处理由客户端发送过来的对象实例[^2]。 #### JSON 数据交互 (@RequestBody/@ResponseBody) 现代应用程序经常采用RESTful API设计模式,在这种情况下,前后端之间交换的信息通常是JSON格式字符串。为了简化开发过程,Spring提供了专门用于解析和序列化JSON消息体的支持——即`@RequestBody`与`@ResponseBody`两个注解配合Jackson库一起工作。 - **前端AJAX调用示例** ```javascript $.ajax({ url : '/save', contentType:'application/json;charset=UTF-8', data : JSON.stringify({title:"My Title", content:"Some Content"}), success:function(data,status,xhr){}, error:function(xhr,status,error){} }); ``` - **后端处理示例** ```java @RestController @RequestMapping("/articles") public class ArticleController { @PostMapping("") public void saveArticle(@RequestBody Article article){ articleService.save(article); } } ``` 这段Java代码表明了一个能够响应保存文章操作的服务接口,它会把接收到的内容反序列化成对应的JavaBean实例。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值