Java 自定义参数解组
我收到一个字符串行作为查询参数,如Java 自定义参数解组,java,jax-rs,jersey-2.0,Java,Jax Rs,Jersey 2.0,我收到一个字符串行作为查询参数,如 parameter=123,456,789 我想直接在我的控制器中获得列表。大概是这样的: @GET @Path(REST_PATH) @Produces(MediaType.APPLICATION_JSON) public Response getSomeStuff(@MagicalThing("parameter") List<Integer> requiredList) @GET @路径(剩余路径) @产生(MediaType.APPLI
parameter=123,456,789
我想直接在我的控制器中获得列表
。大概是这样的:
@GET
@Path(REST_PATH)
@Produces(MediaType.APPLICATION_JSON)
public Response getSomeStuff(@MagicalThing("parameter") List<Integer> requiredList)
@GET
@路径(剩余路径)
@产生(MediaType.APPLICATION_JSON)
公共响应getSomeStuff(@MagicalThing(“参数”)列表requiredList)
除了自定义提供程序和其他类型外,可以执行哪些操作:
?
更新:自定义注释解决了这个难题没有内置的机制来实现这一点。您需要自己在方法或提供程序中拆分该字符串,或者在您自己的对象中拆分该字符串,该对象具有带字符串参数的构造函数,例如:
public Response getSomeStuff(@QueryParam("parameter") MyList requiredList) {
List<String> list = requiredList.getList();
}
公共响应getSomeStuff(@QueryParam(“参数”)MyList requiredList){
List List=requiredList.getList();
}
其中MyList可能是:
public class MyList {
List<String> list;
public MyList(Srting parameter) {
list = new ArrayList<String>(parameter.split(","));
}
public List<String> getList() {
return list;
}
}
公共类MyList{
名单;
公共MyList(Srting参数){
列表=新的ArrayList(参数.split(“,”);
}
公共列表getList(){
退货清单;
}
}
然后用您的方法获取我的列表。为什么要使代码更复杂?只需使用request-to-parameter和create-and-utility将字符串转换为整数列表。@Loc,还有一些背景:我有多个端点,具有类似(但不完全相同)的参数语义。我想将参数解析的规则保留在一个地方,因为它们对于相同的参数名是相同的。是吗?是的,但是这个解决方案显示的太多了:每个想要添加服务、使用这些参数的人都必须显式地调用实用程序。我更愿意在接受请求时隐式地实现它。另外:我拥有的非平凡参数越多,需要调用的实用程序类就越多,这将导致每个控制器中都有大量的样板代码。这个对象必须是一个简单的DTO,还是我可以在其中添加一些附加逻辑?任何适合您需要的东西。仅构造函数中的参数是必需的。或者,您可以使用静态方法
valueOf
或fromString
生成该对象。