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
生成该对象。