【问题标题】:REST parsing enum fails for string字符串的 REST 解析枚举失败
【发布时间】:2018-02-12 16:23:44
【问题描述】:

REST URL 允许通过 GET 访问包含枚举值作为查询参数的 url。如果我发送一个包含枚举变量名称的请求,它可以工作,但如果我使用字符串值,它不会。

示例:通过[...]cars/1?myEnum=CLIENT 访问有效,但[...]cars/1?myEnum=Client 无效。为什么?

@XmlType
@XmlEnum
@RequiredArgsConstructor
public enum MyEnum {

    @XmlEnumValue("Client")
    CLIENT("Client"),
    @XmlEnumValue("Server")
    SERVER("Server");

    @Getter
    private final String value;

    public static MyEnum fromValue(String v) {
        for (MyEnum c : MyEnum.values()) {
            if (c.value.equals(v)) {
                return c;
            }
        }
        throw new IllegalArgumentException(v);
    }
}

客户

@GET
@Path("cars/{myPathParam}")
@Produces(MediaType.TEXT_PLAIN)
public String getCars( //
        @PathParam("myPathParam") final String myPathParam,
        @QueryParam("myEnum") final MyEnum myEnum) {
    return "someValue";
}

【问题讨论】:

    标签: xml rest java-ee-7


    【解决方案1】:

    问题在于方法的名称。在我上面的例子中,它是fromValue。但是,根据规范(JSR339,第 3.2 章字段和 Bean 属性),它应该是 valueOffromString

    具有名为 valueOffromString 的静态方法的类型 返回该类型实例的单个 String 参数。如果两者 方法存在然后必须使用valueOf,除非类型是 在这种情况下必须使用枚举 fromString

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-08-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多