Как создать Restful web-сервис с входными параметрами?
Я создаю успокоительный веб-сервис, и я хотел знать, как создать службу с входными параметрами, а также как вызвать ее из веб-браузера.
Например
@Path("/todo")
public class TodoResource {
// This method is called if XMLis request
@PUT
@Produces( {MediaType.APPLICATION_XML,MediaType.APPLICATION_JSON})
public Todo getXML() {
Todo todo = new Todo();
todo.setSummary("This is my first todo");
todo.setDescription("This is my first todo");
return todo;
}
и я могу вызвать его, используя
http://localhost:8088/JerseyJAXB/rest/todo
и я хочу создать такой метод, как
@Path("/todo")
public class TodoResource {
// This method is called if XMLis request
@PUT
@Produces( {MediaType.APPLICATION_XML,MediaType.APPLICATION_JSON})
public Todo getXML(String x, String y) {
Todo todo = new Todo();
todo.setSummary(x);
todo.setDescription(y);
return todo;
}
В случае веб-сервисов на основе мыла я бы вызвал его так:
http://localhost:8088/JerseyJAXB/rest/todo?x=abc&y=pqr
но я хочу знать, как его вызывать с помощью отдыха, а также могу передать параметры, как я делаю в приведенном выше примере, когда я использую отдых и трикотаж.
Ответы
Ответ 1
Вы можете.
Попробуйте что-то вроде этого:
@Path("/todo/{varX}/{varY}")
@Produces({"application/xml", "application/json"})
public Todo whatEverNameYouLike(@PathParam("varX") String varX,
@PathParam("varY") String varY) {
Todo todo = new Todo();
todo.setSummary(varX);
todo.setDescription(varY);
return todo;
}
Затем позвоните в службу поддержки с этим URL-адресом.
http://localhost:8088/JerseyJAXB/rest/todo/summary/description
Ответ 2
Если вы хотите параметры запроса, используйте @QueryParam
.
public Todo getXML(@QueryParam("summary") String x,
@QueryParam("description") String y)
Но вы не сможете отправлять PUT из обычного веб-браузера (сегодня). Если вы укажете URL напрямую, это будет GET.
Философски, похоже, это должен быть POST. В REST вы обычно используете POST для общего ресурса, /todo
, где этот ресурс создает и возвращает новый ресурс, или вы перенаправляете выделенный ресурс, например /todo/<id>
, для создания и/или обновления.
Ответ 3
В JAX-RS Следующие аннотации для извлечения входных значений, отправленных клиентом.
- @PathParam
- @QueryParam
- @MatrixParam
- @FormParam
Синтаксис URL-адреса @PathParam
http://localhost:7001//rest/customers/100/Java4s
Синтаксис URL-адреса @QueryParam
http://localhost:7001/.../rest/customers? custNo = 100 & custName = Java4s
Синтаксис URL-адреса @MatrixParam
http://localhost:7001/.../rest/customers; custNo = 100; custName = Java4s
Синтаксис URL @FormParam
Если у нас есть форма HTML, имеющая два поля ввода и кнопку отправки. Позволяет клиенту вводить эти данные и отправлять веб-службу RESTful. Затем остальные службы будут извлекать эти данные, используя эту аннотацию @FormParam.
Ответ 4
Будьте осторожны. Для этого вам понадобится @GET (не @PUT).
Ответ 5
другой способ сделать - получить UriInfo вместо всего QueryParam
Затем вы сможете получить запросParam по мере необходимости в вашем коде
@GET
@Path("/query")
public Response getUsers(@Context UriInfo info) {
String param_1 = info.getQueryParameters().getFirst("param_1");
String param_2 = info.getQueryParameters().getFirst("param_2");
return Response ;
}
Ответ 6
Вы можете попробовать это... поставить параметры как:
http://localhost:8080/WebApplication11/webresources/generic/getText?arg1=hello в вашем браузере...
package newpackage;
import javax.ws.rs.core.Context;
import javax.ws.rs.core.UriInfo;
import javax.ws.rs.PathParam;
import javax.ws.rs.Produces;
import javax.ws.rs.Consumes;
import javax.ws.rs.DefaultValue;
import javax.ws.rs.GET;
import javax.ws.rs.Path;
import javax.ws.rs.PUT;
import javax.ws.rs.QueryParam;
@Path("generic")
public class GenericResource {
@Context
private UriInfo context;
/**
* Creates a new instance of GenericResource
*/
public GenericResource() {
}
/**
* Retrieves representation of an instance of newpackage.GenericResource
* @return an instance of java.lang.String
*/
@GET
@Produces("text/plain")
@Consumes("text/plain")
@Path("getText/")
public String getText(@QueryParam("arg1")
@DefaultValue("") String arg1) {
return arg1 ; }
@PUT
@Consumes("text/plain")
public void putText(String content) {
}
}