场景:
一个 pluginSdk表,其中有 sdk_id MySQL 自增字段,create_time服务端写入的字段,除了这2个字段外,其余字段需要终端 Request传入:
public class PluginSdkAddRequest extends ZxBaseRequest {
@NotNull
private Long pluginId;
@NotBlank
private String sdkVersion;
@NotNull
private Byte status;
@NotNull
private String memo;
public Long getPluginId() {
return pluginId;
}
public void setPluginId(Long pluginId) {
this.pluginId = pluginId;
}
public String getSdkVersion() {
return sdkVersion;
}
public void setSdkVersion(String sdkVersion) {
this.sdkVersion = sdkVersion;
}
public Byte getStatus() {
return status;
}
public void setStatus(Byte status) {
this.status = status;
}
public String getMemo() {
return memo;
}
public void setMemo(String memo) {
this.memo = memo;
}
}
@RestController
public class PluginSdkAddController {
@Autowired
private PluginSdkMapper pluginSdkMapper;
@Autowired
private ResponseUtil responseUtil;
@PostMapping("/PluginSdkAdd")
public PluginSdkAddResponse go(@Validated @RequestBody PluginSdkAddRequest request){
PluginSdkAddResponse response = new PluginSdkAddResponse();
//这里就是把request携带的字段,存入 表模型,然后写入 MySQL
PluginSdk pluginSdk = new PluginSdk();
pluginSdk.setSdkId();//ID 是自增的,终端不需要传输
pluginSdk.setPluginId(request.getPluginId());
pluginSdk.setSdkVersion(request.getSdkVersion());
pluginSdk.setStatus(request.getStatus());
pluginSdk.setMemo(request.getMemo());
pluginSdk.setCreateTime(System.currentTimeMillis() / 1000); //服务端进行设置
pluginSdkMapper.insert(pluginSdk);
return responseUtil.ok(response);
}
}
需求 就是 把 request转成 表模型,太繁琐,需要有一个 工具类直接 帮把request携带的字段,写入表模型;于是就chatgpt:
在Spring Boot项目中,将一个类的字段复制到另一个类的字段上是一个常见的需求,尤其是在处理DTO(数据传输对象)和实体类之间的转换时。Spring提供了BeanUtils
类,该类提供了copyProperties
方法,可以实现这一功能。
以下是一个简单的例子,展示如何使用BeanUtils.copyProperties
方法:
import org.springframework.beans.BeanUtils;
public class BeanCopyExample {
public static void main(String[] args) {
SourceBean source = new SourceBean();
source.setName("张三");
source.setAge(25);
TargetBean target = new TargetBean();
// 将source对象的属性值复制到target对象中,只复制名称和年龄属性
BeanUtils.copyProperties(source, target);
System.out.println(target.getName()); // 输出:张三
System.out.println(target.getAge()); // 输出:25
}
public static class SourceBean {
private String name;
private int age;
// 省略getter和setter方法
}
public static class TargetBean {
private String name;
private int age;
// 省略getter和setter方法
}
}
在上述例子中,SourceBean
是源对象,TargetBean
是目标对象。通过BeanUtils.copyProperties(source, target)
方法,source
对象的name
和age
属性值被复制到了target
对象中。
需要注意的是,BeanUtils.copyProperties
方法会复制两个对象之间名称和类型都相同的属性。如果目标对象的属性在源对象中不存在,则该属性不会被修改。
看来 这个需求是 刚需,已经有方法了;修改下:
@RestController
public class PluginSdkAddController {
@Autowired
private PluginSdkMapper pluginSdkMapper;
@Autowired
private ResponseUtil responseUtil;
@PostMapping("/PluginSdkAdd")
public PluginSdkAddResponse go(@Validated @RequestBody PluginSdkAddRequest request){
PluginSdkAddResponse response = new PluginSdkAddResponse();
PluginSdk pluginSdk = new PluginSdk();
BeanUtils.copyProperties(request, pluginSdk); //只需 这一句就可以了
pluginSdk.setCreateTime(System.currentTimeMillis() / 1000); //服务端进行设置
pluginSdkMapper.insert(pluginSdk);
return responseUtil.ok(response);
}
}
本文来自博客园,作者:del88,转载请注明原文链接:https://www.cnblogs.com/del88/p/18311406