Accept comma separated value in REST Webservice

2019-05-08 06:52发布

I am trying to receive a list of String as comma separated value in the REST URI ( sample :

http://localhost:8080/com.vogella.jersey.first/rest/todo/test/1/abc,test 

, where abc and test are the comma separated values passed in).

Currently I am getting this value as string and then splitting it to get the individual values. Current code :

@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;
}
}

Is there any better method to achieve the same?

2条回答
We Are One
2楼-- · 2019-05-08 07:28

If you don't know how many comma separated values you will get, then the split you do is as far as I've been able to find the best way to do it. If you know you will always have 3 values as comma separated, then you can get those 3 directly. (for instance if you have lat,long or x,y,z then you could get it with 3 pathvariables. (see one of the stackoverflow links posted below)

there are a number of things you can do with matrix variables but those require ; and key/value pairs which is not what you're using.

Things I found (apart from the matrix stuff) 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?

查看更多
Luminary・发光体
3楼-- · 2019-05-08 07:38

I am not sure what you are trying to achieve with your service, however, it may be better to use query parameters to get multiple values for a single parameter. Consider the below URL.

http://localhost:8080/rest/todos?name=name1&name=name2&name=name3 

And here is the code snippet for the REST service.

@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();
} 
查看更多
登录 后发表回答