2 votes

Comment analyser les paramètres d'une API RESTful avec Dropwizard ?

Disons que je l'ai fait :

@GET
public UserList fetch(@PathParam("user") String userId) {
    // Do stuff here
}

Maintenant, disons que j'ai mon propre type de userId appelons-le UserId . Est-il possible d'analyser cette String à UserId lorsqu'il est passé dans le fetch c'est-à-dire :

@GET
public UserList fetch(@PathParam("user") UserId userId) {
    // Do stuff here
}

Je réalise que je peux analyser la chaîne une fois que je suis dans la méthode, mais il serait plus pratique que ma méthode obtienne le type que je veux.

3voto

nullpointer Points 1135

Eh bien, vous avez tenté de faire un appel GET avec un corps de demande est ce que je trouve pas très utile. Lisez l'article de Paul répondre ici -

vous pouvez envoyer un corps avec GET, et non, il n'est jamais utile de le faire

Ce qui serait bon à pratiquer, c'est de faire un appel PUT ou POST ( PUT et POST dans REST ) comme suit -

@POST
@Path("/some-path/{some-query-param}")
public Response getDocuments(@ApiParam("user") UserId userId,
                             @PathParam("some-query-param") String queryParam) {
    UserId userIdInstance = userId; // you can use the request body further

Note - Le ApiParam utilisée est importée de la com.wordnik.swagger.annotations paquet. Vous pouvez également utiliser FormParam , QueryParam en fonction de votre source d'entrée.

2voto

Khaleel Points 152

Dropwizard utilise Jersey pour le marshalling HTTP<->Java POJO. Vous pourriez utiliser les diverses annotations de Jersey @*Param (@FormParam, @QueryParam, etc.) pour certains des paramètres.

Si vous avez besoin d'utiliser map/marshall vers/depuis des POJOs Java, jetez un coup d'œil à l'application cas de test dans le Dropwizard :

@Path("/valid/")
@Produces(MediaType.APPLICATION_JSON)
@Consumes(MediaType.APPLICATION_JSON)
public class ValidatingResource {
    @POST
    @Path("foo")
    @Valid
    public ValidRepresentation blah(@NotNull @Valid ValidRepresentation representation, @QueryParam("somethingelse") String xer) {
        return new ValidRepresentation();
    }

Ceci définit un point final d'API répondant à la méthode HTTP POST qui attend l'objet ValidRepresentation et "somethingelse" comme paramètre de requête de la méthode HTTP. Le point de terminaison répondra UNIQUEMENT s'il reçoit des paramètres JSON et ne renverra que des objets JSON (@Products et @Consumes au niveau de la classe). Le @NotNull exige que l'objet soit obligatoire pour que l'appel réussisse et le @Valid demande à Dropwizard d'appeler le validateur Hibernate pour valider l'objet avant d'appeler le point de terminaison.

La classe ValidRepresentation est aquí :

package io.dropwizard.jersey.validation;

import com.fasterxml.jackson.annotation.JsonProperty;
import org.hibernate.validator.constraints.NotEmpty;

public class ValidRepresentation {
    @NotEmpty
    private String name;

    @JsonProperty
    public String getName() {
        return name;
    }

    @JsonProperty
    public void setName(String name) {
        this.name = name;
    }
}

Le POJO utilise les annotations Jackson pour définir à quoi doit ressembler la représentation JSON de cet objet. @NotEmtpy est une annotation du validateur Hibernate.

Dropwizard, Jersey et Jackson s'occupent des détails. Donc pour les trucs de base, c'est tout ce dont vous avez besoin.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X