我们说我有:
@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,但是我的方法获得我想要的类型会更方便。
答案 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
包中导入的。根据您的输入来源,您可以类似地使用FormParam
,QueryParam
。
答案 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负责细节。所以对于基本的东西,这就是你所需要的一切。