如何使用Dropwizard解析RESTful API参数

时间:2017-03-27 22:29:16

标签: java rest jersey-2.0 dropwizard

我们说我有:

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

现在,让我们说userId有自己的类型,让我们称之为UserId。传递到String方法时,是否可以将UserId解析为fetch,即:

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

我意识到一旦我进入方法,我就可以解析String,但是我的方法获得我想要的类型会更方便。

2 个答案:

答案 0 :(得分:3)

嗯,您尝试与请求正文进行GET调用是我觉得不太有帮助的。请阅读Paul的answer here -

  

你可以发送一个带有GET的主体,不,这样做是没有用的

练习的好处是,按照以下方式进行PUT或POST呼叫(PUT vs POST in REST) -

@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

注意 - 使用的ApiParam注释是从com.wordnik.swagger.annotations包中导入的。根据您的输入来源,您可以类似地使用FormParamQueryParam

答案 1 :(得分:2)

Dropwizard is using Jersey用于HTTP< - > Java POJO编组。您可以使用Jersey @*Param(@ FormParam,@ QueryParam等)中的各种注释来获取一些参数。

如果您需要在Java POJO中使用map / marshall,请查看test cases in 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();
    }

这定义了响应HTTP POST方法的API端点,该方法期望ValidRepresentation对象和“somethingelse”作为HTTP方法查询参数。端点仅在提供JSON参数时才响应,并且仅返回JSON对象(类级别的@Produces和@Consumes)。 @NotNull要求该对象成为调用成功的必需对象,并且@Valid指示Dropwizard在调用端点之前调用Hibernate验证器来验证对象。

ValidRepresentation类是here

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

POJO正在使用Jackson注释来定义此对象的JSON表示应该如何。 @NotEmtpy是来自Hibernate验证器的注释。

Dropwizard,Jersey和Jackson负责细节。所以对于基本的东西,这就是你所需要的一切。