我试图在REST URI中接收一个String列表作为逗号分隔值(示例:
http://localhost:8080/com.vogella.jersey.first/rest/todo/test/1/abc,test
,其中abc和test是传入的逗号分隔值。)
目前我将此值作为字符串获取,然后将其拆分以获取各个值。 目前的代码:
@Path("/todo")
public class TodoResource {
// This method is called if XMLis request
@GET
@Produces({ MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON })
@Path("/test/{id: .*}/{name: .*}")
public Todo getXML(@PathParam("id") String id,
@PathParam("name") String name) {
Todo todo = new Todo();
todo.setSummary("This is my first todo, id received is : " + id
+ "name is : " + Arrays.asList(name.split("\\s*,\\s*")));
todo.setDescription("This is my first todo");
TodoTest todoTest = new TodoTest();
todoTest.setDescription("abc");
todoTest.setSummary("xyz");
todo.setTodoTest(todoTest);
return todo;
}
}
有没有更好的方法来实现同样的目标?
答案 0 :(得分:6)
我不确定您尝试使用您的服务实现什么,但是,使用查询参数获取单个参数的多个值可能更好。请考虑以下网址。
http://localhost:8080/rest/todos?name=name1&name=name2&name=name3
这是REST服务的代码片段。
@GET
@Produces({ MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON })
@Path("/todos")
public Response get(@QueryParam("name") List<String> names) {
// do whatever you need to do with the names
return Response.ok().build();
}
答案 1 :(得分:0)
如果您不知道将获得多少逗号分隔值,那么您所做的拆分就是我能够找到最佳方法。如果您知道您将始终以逗号分隔3个值,那么您可以直接获得这3个值。 (例如,如果你有lat,long或x,y,z那么你就可以得到3个pathvariables。(参见下面发布的stackoverflow链接之一)
你可以用矩阵变量做很多事情,但那些需要;和键/值对不是你正在使用的。
我找到的东西(除了矩阵的东西) How to pass comma separated parameters in a url for the get method of rest service How can I map semicolon-separated PathParams in Jersey?