繁体   English   中英

同一用户dto,但两个服务的JsonProperty不同

[英]Same User dto but with different JsonProperty for two services

我有两个Spring Rest服务的create-employeecreate-staff ,如下所示

创造雇员

@RequestMapping(value="/create-employee", method = RequestMethod.POST, consumes = "application/json")
public ResponseEntity<Void> createEmployee(final @RequestBody User user) {
    try {
        // employee createion logic
    } catch (Exception exception) {
        log.error("Exception in createEmployee:"+exception.getMessage());
        return new ResponseEntity<>(HttpStatus.FORBIDDEN);
    }
}

创建员工

@RequestMapping(value="/create-staff", method = RequestMethod.POST, consumes = "application/json")
public ResponseEntity<Void> createStaff(final @RequestBody User user) {
    try {
        // staff creation logic
    } catch (Exception exception) {
        log.error("Exception in createStaff:"+exception.getMessage());
        return new ResponseEntity<>(HttpStatus.FORBIDDEN);
    }
}

对于这两种服务,我都使用名为User的dto,如下所示:

public class User {
    @JsonProperty("employeeName")
    private String name;

    @JsonProperty("age")
    private Integer age;

    @JsonProperty("managerName")
    private String headName;

    public String getName() {
        return name;
    }

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

    public Integer getAge() {
        return age;
    }

    public void setAge(Integer age) {
        this.age = age;
    }

    public String getHeadName() {
        return headName;
    }

    public void setHeadName(String headName) {
        this.headName = headName;
    }
}

现在的问题是,对于create-employeecreate-staff,因为我使用User.java作为请求正文。 发布的json主体看起来像这样

{
 "employeeName" : "string",
 "age" : "integer",
 "managerName" : "string"
}

但实际上我想要的是对于create-staff服务,我希望拥有json主体,如下所示

{
 "staffName" : "string",
 "age" : "integer",
 "managerName" : "string"
}

create-staff服务,我想拥有json主体,如下所示

{
 "employeeName" : "string",
 "age" : "integer",
 "managerName" : "string"
}

但是对于这两个服务,我需要对两个服务使用相同的User.java dto,但使用不同的JsonProperty

有人可以帮我吗

杰克逊还支持JsonAlias ,这可能对您有所帮助,只需确保将jacskon映射器更新为2.9.1版即可。

public class User {
    @JsonAlias({"employeeName","staffName"})
    private String name;

    @JsonProperty("age")
    private Integer age;

    @JsonProperty("managerName")
    private String headName;

    public String getName() {
        return name;
    }

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

    public Integer getAge() {
        return age;
    }

    public void setAge(Integer age) {
        this.age = age;
    }

    public String getHeadName() {
        return headName;
    }

    public void setHeadName(String headName) {
        this.headName = headName;
    }
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM