我目前正在尝试使用 Glassfish 4(使用 Jersery 2.0 和 EclipseLink 2.5)对通过 REST PUT 提供的 JSON 对象进行解码。
JSON 对象由多个属性组成,其中包括映射到 Java 枚举的字符串值。
除了有效负载中提供了无效的 ENUM 值之外,一切都按预期工作
JSON 对象:
{
"rating":"INVALID",
...
}
被解码为:
public RatingInfo {
@ValidRating
private Rating rating;
...
public Rating getRating(){...}
public void setRating(Rating rating){...}
...
}
public enum Rating {
G,
PG
}
如果 JSON 负载中的值不是有效的评级,它当前会返回 null,这似乎是 JAXB 忽略转换错误的结果,请参阅 Handling invalid enum values while doing JAXB Unmarshalling
问题是我需要区分评级实际上为空(这是有效用例)的情况与 JSON 中评级值无效的情况,以便我可以在 REST 响应中返回 400 错误。
我不知道如何覆盖使用 JAX-RS 并使用 MOXy 作为默认提供程序时忽略转换错误的默认行为。
最佳答案
最简单的方法是创建一个 XmlAdapter
并自行处理 String
到 enum
的转换。然后当该值不正确时您可以采取相应的措施。
关于java - 使用 JAX-RS 和 MOXy 处理无效枚举,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22794772/