【发布时间】:2021-11-20 20:43:49
【问题描述】:
我正在使用这样的@BeanParam:
@GET
public Response listAllPaged(@BeanParam PagedRequest pagedRequest) {
// Do stuff...
}
bean 本身:
public class PagedRequest {
@QueryParam("sortOrder")
@DefaultValue("0")
public int sortOrder;
}
现在我想将 sortOrder 的类型更改为以下枚举:
public enum SortOrder {
ASC("asc"),
DESC("desc");
public final String sortOrder;
SortOrder(String sortOrder) {
this.sortOrder = sortOrder;
}
}
但只要我这样做:
public class PagedRequest {
@QueryParam("sortOrder")
@DefaultValue("asc")
public SortOrder sortOrder;
}
我的 REST Endpoint 无法再匹配签名并返回 404。这是为什么?我认为接受单个字符串的构造函数的存在应该允许 JAX-RS 进行转换。
我做错了什么?
更新
我设法让它像这样工作,但它并没有真正回答我最初的问题......
public enum SortOrder {
ASC,
DESC;
public static SortOrder fromString(String param) {
String toUpper = param.toUpperCase();
try {
return valueOf(toUpper);
} catch (Exception e) {
return null;
}
}
}
【问题讨论】:
-
你是在路径中使用int还是枚举名?
-
@JamesR.Perkins 我不确定我是否理解您的问题。路径没有改变。
-
我的意思是像
/rest/request/ASC这样的东西应该在/rest/request/1不能工作的地方工作,除非你使用ParamConverter。 -
@JamesR.Perkins 这是一个查询参数而不是路径参数,所以它就像 /rest/request?sortOrder=asc
-
这很奇怪,更改查询参数应该对此没有任何影响。