【发布时间】:2018-06-07 16:22:05
【问题描述】:
我有以下 json 我想反序列化为 Java 对象:
{
"firstname": "John",
"lastname": "Do",
"sex": "",
}
在另一部分,我有一个 Java Rest Webservice:
@POST
@Consumes(APPLICATION_JSON)
@Produces(APPLICATION_JSON)
public Response findPerson(@Valid PersonneRequest personne) {
if(personne!= null){
Personne result = null;
// do some stuff
return Response.ok(result).build();
}
// Bad request
return Response.status(Response.Status.BAD_REQUEST).build();
}
这是 Personne 类:
公共类 PersonneRequest 实现 Serializable{
private String firstname;
private String lastname;
private Sex sex;
// getter 和 setter
}
这是我的 Sexe 课程:
public enum Sex{
MAN("man"),
WOMAN("woman");
private String type;
private Sex(String type){
this.type = type;
}
public String getType(){
if(type!=null && !StringUtils.isEmpty(type)){
return type;
}
return MAN.getType();
}
}
我的问题是当我在我的 webervice 上拨打电话时。当性别为空时,Json 数据不会反序列化。我收到以下异常。如何为 enum 的空值设置一个值? 这是我的 java 异常:
org.codehaus.jackson.map.JsonMappingException: Can not construct instance of Sex from String value '': value not one of declared Enum instance names
at [Source: org.glassfish.jersey.message.internal.EntityInputStream@5ed82ec0; org.codehaus.jackson.map.JsonMappingException.from(JsonMappingException.java:163) ~[jackson-mapper-asl-1.9.2.jar:1.9.2]
at org.codehaus.jackson.map.deser.StdDeserializationContext.weirdStringException(StdDeserializationContext.java:243) ~[jackson-mapper-asl-1.9.2.jar:1.9.2]
at org.codehaus.jackson.map.deser.std.EnumDeserializer.deserialize(EnumDeserializer.java:74) ~[jackson-mapper-asl-1.9.2.jar:1.9.2]
at org.codehaus.jackson.map.deser.std.EnumDeserializer.deserialize(EnumDeserializer.java:23) ~[jackson-mapper-asl-1.9.2.jar:1.9.2]
at org.codehaus.jackson.map.deser.SettableBeanProperty.deserialize(SettableBeanProperty.java:299) ~[jackson-mapper-asl-1.9.2.jar:1.9.2]
at org.codehaus.jackson.map.deser.SettableBeanProperty$MethodProperty.deserializeAndSet(SettableBeanProperty.java:414) ~[jackson-mapper-asl-1.9.2.jar:1.9.2]
at org.codehaus.jackson.map.deser.BeanDeserializer.deserializeFromObject(BeanDeserializer.java:697) ~[jackson-mapper-asl-1.9.2.jar:1.9.2]
at org.codehaus.jackson.map.deser.BeanDeserializer.deserialize(BeanDeserializer.java:580) ~[jackson-mapper-asl-1.9.2.jar:1.9.2]
at org.codehaus.jackson.map.ObjectMapper._readValue(ObjectMapper.java:2695) ~[jackson-mapper-asl-1.9.2.jar:1.9.2]
at org.codehaus.jackson.map.ObjectMapper.readValue(ObjectMapper.java:1308) ~[jackson-mapper-asl-1.9.2.jar:1.9.2]
at org.codehaus.jackson.jaxrs.JacksonJsonProvider.readFrom(JacksonJsonProvider.java:419) ~[jackson-jaxrs-1.9.13.jar:1.9.13]
谢谢
【问题讨论】:
-
确保您的客户端在不知道“sex”属性值时发送
null而不是空字符串。
标签: java json serialization enums