【发布时间】:2019-10-23 14:41:24
【问题描述】:
在 spring 数据休息项目中,我使用自定义 RuntimeException 在自定义反序列化器中调用
public class LocalDateDeserializer extends StdDeserializer<LocalDate> {
...
@Override
public LocalDate deserialize(JsonParser jsonparser, DeserializationContext context) throws IOException, JsonProcessingException {
String date = jsonparser.getText();
String name = jsonparser.getCurrentName();
try {
return LocalDate.parse(date, DateTimeFormatter.ISO_LOCAL_DATE);
} catch (DateTimeParseException e) {
throw new ApiJacksonException("error on: " + name);
}
}
}
我的用户.class
@Data
@NoArgsConstructor
public class User extends Auditing implements Serializable {
private static final long serialVersionUID = 1L;
...
@DateTimeFormat(iso = ISO.DATE)
@JsonFormat(pattern = "yyyy-MM-dd")
@JsonDeserialize(using = LocalDateDeserializer.class)
@JsonSerialize(using = LocalDateSerializer.class)
private LocalDate birthdate;
}
当我发送日期格式错误的 POST 请求时,@ControllerAdvice 会捕获自定义 RuntimeException
但是当我发送一个日期格式错误的 PATCH 请求时,它会显示 RuntimeException 被 JsonMappingException 包装并且不能被 @ControllerAdvice 捕获 在我设置的属性文件中
spring.jackson.deserialization.wrap-exceptions = false
我是不是错过了什么!
【问题讨论】:
标签: jackson spring-data-rest json-deserialization runtimeexception