如何使用Dropwizard解析RESTful API参数

5

假设我有以下内容:

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

现在,假设我有自己的userId类型,我们称之为UserId。当它传递到fetch方法中时,是否可能将该String解析为UserId?例如:

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

我知道一旦进入方法,我可以解析字符串,但更方便的方式是让我的方法得到我想要的类型。

2个回答

3

Dropwizard使用Jersey进行HTTP<->Java POJO转换。您可以使用Jersey的各种注释,例如@*Param(@FormParam,@QueryParam等),用于一些参数。

如果您需要使用map / marshall转换Java POJOs,请查看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();
    }

这定义了一个API端点,响应HTTP POST方法,期望ValidRepresentation对象和“somethingelse”作为HTTP方法查询参数。只有在提供JSON参数时,端点才会做出响应,并且仅返回JSON对象(在类级别上的@Produces和@Consumes)。 @NotNull要求该对象对于调用是必需的,@Valid指示Dropwizard调用Hibernate验证器在调用端点之前验证对象。ValidRepresentation类在此处。
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表示形式。@NotEmpty是Hibernate验证器中的注解。

Dropwizard、Jersey和Jackson负责处理细节。因此,对于基本内容,这就是您所需的全部内容。


2
你尝试使用请求体进行GET调用,这并不是很有帮助。请参考Paul在这里的回答 -

你可以发送一个带有请求体的GET请求,但是从来没有这样做是有用的。

为了练习,下面演示如何进行PUT或POST调用(REST中的PUT vs POST) -
@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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接