场景:

一个 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对象的nameage属性值被复制到了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);
    }
}
posted on 2024-07-19 14:30  del88  阅读(40)  评论(0编辑  收藏  举报