【发布时间】:2017-11-20 04:14:48
【问题描述】:
我有两个 Spring Rest 服务 create-employee 和 create-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-employee 和 create-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
谁能帮我解决这个问题
【问题讨论】:
-
如果您只使用
name并消除了这样做的任何需要怎么办? -
@NickPredey 你是对的,但实际上这是客户要求,不仅有这么多其他服务有类似的场景。想知道是否有任何方法可以有条件地更改员工和员工的 json 属性。
-
@AlexMan :您正试图通过强制使用 Json 概念来解决设计问题。为什么
User中没有成员属性Statut statut。enum Statut{ STAFF, USER, MANAGER, ....} -
@AlexMan 您可以在您的用户对象中添加两个属性成员并告诉杰克逊不要返回
null值。class User { String employeeName; String staffName; ... }。看这里stackoverflow.com/questions/11757487/…