将多个@queryParam 映射到单个对象

Mapping of multiple @queryParam into a single object

我有一个本地服务,我想通过我们的 restful api:

访问
@GET
@Path("/some/path")
OutputObject doSomeSpecialCalculation(@QueryParam("input") InputObject obj);

以下 problem/problems - 最好的方法是什么:

Q1:是否可以将多个queryParam映射到一个对象中?

我可以像这样创建一个新的本地服务方法:

@GET
@Path("/some/path")
OutputObject doSomeSpecialCalculation(@QueryParam("obj1") Obj1 ob1, @QueryParam("obj2") Obj2 ob2, ...);

然后我可以为每个 obj_n 创建多个 ParamProvider 并且它会工作,但我不想在我们的本地服务中创建重复的方法。

问题 2:对于我的特定问题,是否有更好的解决方案?

TL;DR:

如果我可以仅使用注解解决这个问题,那就太棒了:复杂对象上的@JsonTypeInfo,以及复杂对象构造函数的输入对象上的一些 "use-that-converter"-注解。

此致,

(使用杰克逊 1.9/jboss eap 6.2)

在 Endpoint 的方法参数(您的自定义 class)上使用 @BeanParam 注释,并在自定义字段上使用所有需要的 @QueryParam、@Header 等值 class.

这就是 POST 和 JSON 的样子:

JSON:

{
    "user_name" : "Chewbacca",
    "year_of_birth" : 1977
}

Java:

import com.fasterxml.jackson.annotation.JsonCreator;
import com.fasterxml.jackson.annotation.JsonProperty;

import javax.validation.constraints.Min;
import javax.validation.constraints.NotNull;

public class SimpleRequest {

    @NotNull
    private final String userName;

    @Min(1900)
    private final int yearOfBirth;

    @JsonCreator
    public SimpleRequest(@JsonProperty("user_name") String userName,
                         @JsonProperty("year_of_birth") int yearOfBirth) {
        this.userName = userName;
        this.yearOfBirth = yearOfBirth;
    }

    public String getUserName() {
        return userName;
    }

    public int getYearOfBirth() {
        return yearOfBirth;
    }
}