java - 使用 JAX-RS 和 MOXy 处理无效枚举

标签 java json jaxb moxy glassfish-4

我目前正在尝试使用 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 并自行处理 Stringenum 的转换。然后当该值不正确时您可以采取相应的措施。

关于java - 使用 JAX-RS 和 MOXy 处理无效枚举,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22794772/

相关文章:

java - 如何在不使用注释的情况下使用 JAXB 将 java 对象转换为 xml?

Java:读取jpeg/gif的压缩比

java - Apache POI Excel 仅显示数据标签和切割图

ios - 休息,Json,Alamofire - Swift

javascript - 从键名获取数组的元素对象

java - Jaxb 注释 - 从 xml 元素中提取 xml 值

java - 如何从 IFolder 获取 url

java - 访问当前用户,在 spring Controller 中,getAuthentication() 返回 null

java - Jackson 如何将对象数组转换为类中的平面属性取决于值

java - JAXB 编码错误