Enum の静的ファクトリで @JsonCreator を再生していますが、"Sex":"Male" を含む Json オブジェクトが要求ペイロードに存在する場合、CXF は updateUser メソッドを検出して呼び出しません。この列挙型の文字列表現を取り出すと機能します。
これら3つのクラス/列挙型を構造化して、文字列から列挙型への逆シリアル化を機能させる方法についてのアイデア。ありがとう!
ユーザーリソース:
@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();
}
そして UserBean:
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;
}
}