如何在URL中传递两个查询参数

时间:2015-06-17 12:03:28

标签: java web-services rest java-ee jax-rs

@Stateless
@Path("projection")
public class ProjectionManager {

@Inject
private ProjectionDAO projectionDAO;

@Inject
private UserContext userContext;

@GET
@Path("{projectionId}")
@Produces("application/json")
public String places(@PathParam("projectionId") String projectionId) {
    return projectionDAO.findById(Long.parseLong(projectionId)).getPlaces().toString();
}}

在此示例中,此服务的url应为/ projection / projectionId,但我如何在此代码中访问具有两个或更多查询参数的服务:

@PUT
@Path("/buy")
public Response buyTicket(@QueryParam("projectionId") String projectionId, @QueryParam("place") String place){
    Projection projection = projectionDAO.findById(Long.parseLong(projectionId));
    if(projection != null){
        projectionDAO.buyTicket(projection, userContext.getCurrentUser(), Integer.parseInt(place));
    }

    return Response.noContent().build();
}

3 个答案:

答案 0 :(得分:4)

/buy?projectionId=value1&place=value2

请查看https://en.wikipedia.org/wiki/Query_string以获取更多信息。由于它是HTTP PUT,您不能简单地在浏览器中打开该URL,您可以编写一些简单的REST客户端或使用Chrome中的Postman等浏览器扩展。

答案 1 :(得分:0)

查询参数是URI中?之后的事物,而path参数是URI中?之前的参数。

如果您的方法需要两个输入,则可以使用查询参数和路径参数=>的任意组合。四种组合

这是一个很好的惯例,路径参数应该表示资源的某种形式,因为它是它的一部分地址,而查询参数更多的形式/形状/过滤响应。

在您的情况下,我将两个参数编码为路径参数,因此代码如下所示:

@PUT
@Path("/buy/{projectionId}/place/{place}")
public Response buyTicket(@PathParam("projectionId") String projectionId, @PathParam("place") String place){
    Projection projection = projectionDAO.findById(Long.parseLong(projectionId));
    if(projection != null){
        projectionDAO.buyTicket(projection, userContext.getCurrentUser(), Integer.parseInt(place));
    }

    return Response.noContent().build();
}

网址如下: ${host}/buy/1337/place/42

答案 2 :(得分:0)

感谢您的投入,我们已解决此问题。

似乎我必须将path参数添加到其他参数,并在请求上传递其他参数,而不是path参数。代码如下所示,

it('should get a customer, searches with a customer name', (done) => {
var pathParams = {};
var body = {};
var additionalParams = {
queryParams: {
name: 'Ominathi'
}
};
//apigClient.invokeApi(pathParams, '/customer', 'GET', queryParams, body)
apigClient.invokeApi(pathParams, '/customer', 'GET', additionalParams, body)
.then(response => {
expect(response.status).toBe(200);
done();
})
.catch(err => {
fail(err);
done();
});
});

谢谢。

参考:https://www.npmjs.com/package/aws-api-gateway-client

相关问题