加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

java – 在创建,更新和获取休息端点中相同/不同的DTO对象?

发布时间:2020-12-15 02:59:40 所属栏目:Java 来源:网络整理
导读:考虑使用UserDTO类和UserController公开端点来创建,更新和获取用户. 在UserDTO类中具有id属性对于创建和更新没有意义.如果我使用swagger或其他自动生成的API文档,那么它会显示id可以在create end point中传递.但系统不使用它,因为ID是在内部生成的. 如果我看
考虑使用UserDTO类和UserController公开端点来创建,更新和获取用户.

在UserDTO类中具有id属性对于创建和更新没有意义.如果我使用swagger或其他自动生成的API文档,那么它会显示id可以在create end point中传递.但系统不使用它,因为ID是在内部生成的.

如果我看看get那么可能我可以摆脱id属性,但它肯定是在列表用户端点.

我想在get / list端点返回内部用户域对象.这样我就可以从UserDTO类中删除id属性.

我可以为此采用更好的选择吗?

public class UserDTO {
    private int id;
    private String name;

    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }
}

@RestController
@RequestMapping(value = "/users",produces = MediaType.APPLICATION_JSON_VALUE)
public class UserController {
    @RequestMapping(method = RequestMethod.POST)
    @ResponseBody
    public ResponseEntity<Void> create(@RequestBody UserDTO user) {
    }

    @RequestMapping(value = "{id}",method = RequestMethod.GET)
    @ResponseBody
    public ResponseEntity<UserDTO> get(@PathVariable("id") int id) {
    }

    @RequestMapping(value = "{id}",method = RequestMethod.PUT)
    @ResponseBody
    public ResponseEntity<Void> update(@PathVariable("id") int id,@RequestBody UserDTO user) {
    }
}

可能有人问过这个问题,但我找不到.请原谅我重复的问题.

解决方法

Data Transfer Object(DTO)是一种用非常明确的目的创建的模式:将数据传输到远程接口,就像Web服务一样.这种模式非常适合REST API,从长远来看,DTO将为您提供更大的灵活性.

一旦REST资源表示不需要与持久性对象具有相同的属性,我建议为端点使用定制的类.

为避免样板代码,您可以使用映射框架(如MapStruct)将REST API DTO映射到/来自持久性对象.

有关在REST API中使用DTO的好处的详细信息,请检查以下答案:

> Why you should use DTOs in your REST API
> Using tailored classes of request and response

要为您的DTO提供更好的名称,请检查以下答案:

> Giving meaningful names to your DTOs

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读