SpringBoot自定义对象参数实现自动类型转换与格式化
序章
问题提出一:
当我们用表单获取一个 Person 对象的所有属性值时, SpringBoot 是否可以直接根据这些属性值将其转换为 Person 对象
回答:
当然可以,SpringBoot 通过自定义对象参数,可以实现自动类型转换与格式化,并可以级联封装(一个对象拥有另一个对象作为属性时,也可以封装)。
一、实体类 Bean
person类
注: 构造方法一定要写全,无参数和有参数的都要写,不然封装过程会出问题
import org.springframework.context.annotation.Bean; import javax.xml.crypto.Data; public class Person { String userName; int age; Pet pet; public Person() { } public Person(String userName, int age, Pet pet) { this.userName = userName; this.age = age; this.pet = pet; } public String getUserName() { return userName; } public void setUserName(String userName) { this.userName = userName; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } public Pet getPet() { return pet; } public void setPet(Pet pet) { this.pet = pet; } }
pet类
package com.example.demo2.bean; public class Pet { String name; String age; public Pet() { } public Pet(String name, String age) { this.name = name; this.age = age; } public String getName() { return name; } public void setName(String name) { this.name = name; } public String getAge() { return age; } public void setAge(String age) { this.age = age; } }
二、前端表单index.html
注意 input 的 name 属性值要与类的属性名一一对应
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>自定义参数绑定原理</title> </head> <body> <form action="/saveuser" method="post"> 姓名: <input name="userName" value="liuwanqing"/> <br/> 年龄: <input name="age" value="20"/> <br/> 宠物姓名:<input name="pet.name"/><br/> 宠物年龄:<input name="pet.age" /> <input type="submit" value="保存"> </form> </body> </html>
三、Controller 类
Post /saveuser 请求, 返回封装好的 Person 类
package com.example.demo2.controller; import com.example.demo2.bean.Person; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RestController; @RestController public class ParameterTestController { @PostMapping("/saveuser") public Person saveuser(Person person){ return person; } }
四、运行结果截图
提出问题二: SpringBoot 之所以可以自动获取表单值封装为指定类型对象,是因为SpringBoot 具有严密的参数解析机制, 但是若我们的输入值SpringBoot 不能解析时,难道我们就只能坐以待毙了嘛
回答: 不是,我们可以通过WebMvcConfigurer定制化SpringMVC的功能,通过重写 addFormatters 方法自定义类型参数
示例
如下表单中的 “huahua,5个月” 字符串是不能被 SpringBoot 解析为 Pet 类型的
<form action="/saveuser" method="post"> 姓名: <input name="userName" value="liuwanqing"/> <br/> 年龄: <input name="age" value="20"/> <br/> 宠物:<input name="pet" value="huahua,5个月"/> <input type="submit" value="保存"> </form>
自定义类型参数 封装POJO:
编写WebConfig类实现WebMvcConfigurer类,重写 addFormatters 方法
package com.example.demo2.config; import com.example.demo2.bean.Pet; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.core.convert.converter.Converter; import org.springframework.format.FormatterRegistry; import org.springframework.util.StringUtils; import org.springframework.web.servlet.config.annotation.WebMvcConfigurer; @Configuration public class WebConfig implements WebMvcConfigurer{ //1、WebMvcConfigurer定制化SpringMVC的功能 @Bean public WebMvcConfigurer webMvcConfigurer(){ return new WebMvcConfigurer() { @Override public void addFormatters(FormatterRegistry registry) { registry.addConverter(new Converter<String, Pet>() { @Override public Pet convert(String source) { if(!StringUtils.isEmpty(source)){ Pet pet = new Pet(); String[] split = source.split(","); pet.setName(split[0]); pet.setAge(split[1]); return pet; } return null; } }); } }; } }
到此这篇关于SpringBoot自定义对象参数实现自动类型转换与格式化的文章就介绍到这了,更多相关SpringBoot自定义对象参数内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!
相关文章
ApiOperation和ApiParam注解依赖的安装和使用以及注意事项说明
这篇文章主要介绍了ApiOperation和ApiParam注解依赖的安装和使用以及注意事项说明,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教2023-09-09SpringMVC HttpMessageConverter报文信息转换器
HttpMessageConverter,报文信息转换器,将请求报文转换为Java对象,或将Java对象转换为响应报文。HttpMessageConverter提供了两个注解和两个类型:@RequestBody,@ResponseBody,RequestEntity,ResponseEntity2023-01-01Java源码分析:Guava之不可变集合ImmutableMap的源码分析
今天给大家带来的是关于Java源码的相关知识,文章围绕着Java ImmutableMap展开,文中有非常详细的介绍及代码示例,需要的朋友可以参考下,希望能给你带来帮助2021-06-06SpringCloud使用CircuitBreaker实现熔断器的详细步骤
在微服务架构中,服务之间的依赖调用非常频繁,当一个下游服务因高负载或故障导致响应变慢或不可用时,可能会引发上游服务的级联故障,最终导致整个系统崩溃,熔断器是解决这类问题的关键模式之一,Spring Cloud提供了对熔断器的支持,本文将详细介绍如何集成和使用它2025-02-02
最新评论