我有一个localService,我想通过我们的restful api访问:
@GET
@Path("/some/path")
OutputObject doSomeSpecialCalculation(@QueryParam("input") InputObject obj);
以下问题/问题 - 最好的方法是什么:
Q1:是否可以将多个queryParams映射到单个对象中?
我可以创建一个新的本地服务方法:
@GET
@Path("/some/path")
OutputObject doSomeSpecialCalculation(@QueryParam("obj1") Obj1 ob1, @QueryParam("obj2") Obj2 ob2, ...);
然后我可以为每个obj_n创建多个ParamProviders并且它可以工作,但我不想在我们的本地服务中创建重复的方法。
Q2:我的特定问题会有更好的解决方案吗?
TL; DR:
如果我只用注释解决这个问题就太棒了:复杂对象上的@JsonTypeInfo,以及复杂对象构造函数的输入对象上的一些“use-that-converter”注释。
此致
(使用jackson 1.9 / jboss eap 6.2)
答案 0 :(得分:1)
在Endpoint的方法参数(您的自定义类)上使用@BeanParam注释,并在自定义类的字段上使用所有必需的@QueryParam,@ Header等值。
这就是使用JSON的POST的样子:
JSON:
{
"user_name" : "Chewbacca",
"year_of_birth" : 1977
}
爪哇:
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;
}
}