【发布时间】:2017-08-10 14:32:01
【问题描述】:
这是我使用@JsonDeserialize 的属性
@Transient
@JsonDeserialize(using = SharedUserDeserializer.class)
private Set<UserVehicleMappingVO> sharedVehicle;
public Set<UserVehicleMappingVO> getSharedVehicle() {
return sharedVehicle;
}
public void setSharedVehicle(Set<UserVehicleMappingVO> sharedVehicle) {
this.sharedVehicle = sharedVehicle;
}
而自定义的解串器代码是
public class SharedUserDeserializer extends JsonDeserializer<Set<UserVehicleMappingVO>> {
@Override
public Set<UserVehicleMappingVO> deserialize(JsonParser paramJsonParser,
DeserializationContext paramDeserializationContext)
throws IOException, JsonProcessingException {
try {
Set<UserVehicleMappingVO> list = new ObjectMapper().readValue(paramJsonParser.toString(),
new TypeReference<Set<UserVehicleMappingVO>>() {});
return list;
} catch (IOException e) {
e.printStackTrace();
}
return new HashSet<>();
}
}
但是从不调用反序列化器。请帮忙
每次我得到这个异常时......
ERROR :::9,gajendranc@azuga.com - Exception in
method===org.springframework.validation.BeanPropertyBindingResult: 1 errors
Field error in object 'trackee' on field 'sharedVehicle': rejected value
[[{"userId":"5d48b74f-7da2-11e7-87bf-
1383429d1d89","expireTime":1504190100000}]]; codes
[typeMismatch.trackee.sharedVehicle,typeMismatch.sharedVehicle,
typeMismatch.java.util.Set,typeMismatch]; arguments
[org.springframework.context.support.DefaultMessageSourceResolvable: codes
[trackee.sharedVehicle,sharedVehicle]; arguments []; default message
[sharedVehicle]]; default message [Failed to convert property value of type
[java.lang.String] to required type [java.util.Set] for property
'sharedVehicle'; nested exception is java.lang.IllegalStateException: Cannot
convert value of type [java.lang.String] to required type
[com.azuga.user.manager.UserVehicleMappingVO] for property
'sharedVehicle[0]':
请帮忙........
【问题讨论】:
-
为什么是@Transient?您想在序列化过程中忽略该字段吗?
-
@Barath : Transient 是为了让休眠在持久化到表时忽略这个字段...它与序列化无关。
-
感谢您的教育。因为我找不到任何用于瞬态的导入语句,所以我认为它必须与 java 序列化有关。
标签: java spring jackson json-deserialization objectmapper