3

我正在使用 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;
}

}

4

0 回答 0