web-dev-qa-db-ja.com

URLで2つのクエリパラメータを渡す方法

この例では、サービスのURLの形式は/projection/projectionIdです。

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

次のコードを使用してサービスにアクセスするために2つ(またはそれ以上)のクエリパラメーターを渡すにはどうすればよいですか。

@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();
}
7
alle3x
/buy?projectionId=value1&place=value2

詳細については https://en.wikipedia.org/wiki/Query_string をご覧ください。そして、それはHTTP PUTなので、ブラウザでそのURLを単に開くことはできません。簡単なRESTクライアントを記述するか、ChromeのPostmanのようなブラウザ拡張機能を使用できます。

5
Tomasz W

クエリパラメータは、URIの?の後のものであり、パスパラメータは、URIの?の前のパラメータです。

メソッドに2つの入力が必要な場合は、クエリパラメータとパスパラメータの任意の組み合わせを使用できます=> 4つの組み合わせ

パスパラメータはアドレスの一部であるため、パスパラメータはリソースの特定の種類のIDを示す必要がありますが、クエリパラメータは応答のフォーム/形状/フィルタリングの一部です。

あなたの場合、両方のパラメータをパスパラメータとしてエンコードするので、コードは次のようになります。

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

URLは次のようになります:${Host}/buy/1337/place/42

0
Jiri Kremser

ご協力ありがとうございます。修正しました。

パスパラメータを追加パラメータに追加し、パスパラメータの代わりにリクエストで追加パラメータを渡す必要があったようです。コードは以下のようになります、

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

0
Malusi Ninela