我正在使用 Enum 中的静态工厂玩 @JsonCreator,但是当请求有效负载中存在带有“Sex”:“Male”的 Json 对象时,CXF 不会检测并调用 updateUser 方法。当我取出枚举的这个字符串表示时,它就起作用了。
任何想法如何构造这三个类/枚举以使反序列化从字符串到枚举工作。谢谢!
用户资源:
@PUT
@Produces("application/json")
@Consumes("application/json")
@Path("/{user-id}")
public Response updateUser(UserBean user, @PathParam("user-id") Long userId) {
user.setId(userId);
UserBean registeredUser = userService.updateUser(user);
return Response.ok().entity(registeredUser).build();
}
和用户Bean:
public class UserBean {
private long id;
private String firstName;
private String lastName;
private String email;
private String phone;
private String password;
private Sex sex;
.....
和枚举:
public enum Sex {
FEMALE("Female", 0),
MALE("Male", 1);
private String desc;
private int value;
Sex(String desc, int value) {
this.desc = desc;
this.value = value;
}
public String desc() {
return desc;
}
@JsonValue
public int value() {
return value;
}
@JsonCreator
public static Sex fromString(@JsonProperty("sex") String desc) {
for (Sex type : Sex.values()) {
if (type.equals(desc)) {
return type;
}
}
return null;
}
}