java jersey 2 如何使用 post 处理常规 html 表单数组?
java jersey 2 how to process regular html form array with post?
我有球衣端点
@Path(value = "/testfields")
@POST
@Consumes({"application/x-www-form-urlencoded"})
public Response acceptFields(@BeanParam MyWrapper initialWrapper,String entity) {
//.......
}
MyWrapper 是:
class MyWrapper{
@FormParam("param1")
private String param1;
@FormParam("inners")
private List<MyInnerWrapper> inners;
//..getters setters
}
class MyInnerWrapper{
@FormParam("innerParam1")
private String innerParam1;
//.... getters setters
}
我有请求 POST 实体字符串:
param1=aaa&inners[0]["innerParam"]=bbb&inners[1]["innerParam"]=nnn
问题是我可以用@BeanParam注解获取父字段param1,但是我无法获取自定义classes的内部列表,为什么?如何处理常规 html 表单数组?我需要在端点中使用其内部 class 对我的 class 进行评估。我尝试了数组、对象列表,但没有任何效果。谢谢
据我所知,泽西岛不支持这种语法。如果要为 @FormParam
使用自定义类型,则至少需要满足 Javadoc 中列出的一种要求。一种选择是只使用带有 String 参数的构造函数。例如
public class MyInnerWrapper {
private final String innerParam;
public MyInnerWrapper(String param) {
this.innerParam = param;
}
public String getInnerParam() {
return innerParam;
}
}
那么您需要做的就是发送这个请求
param1=blahparam&inners=first&inners=second&inners=third
那你可以
@FormParam("inners")
private List<MyInnerWrapper> inners;
不需要 []
来指定索引。允许重复。这就是为什么我们可以使用 @FormParam
类型的列表和数组。
现在,如果您想拥有多个 属性,然后尝试像现在这样映射它们,我认为这行不通。至少在泽西岛没有。如果您需要更复杂的类型,我建议您考虑使用 JSON。否则就坚持使用简单的键。
我有球衣端点
@Path(value = "/testfields")
@POST
@Consumes({"application/x-www-form-urlencoded"})
public Response acceptFields(@BeanParam MyWrapper initialWrapper,String entity) {
//.......
}
MyWrapper 是:
class MyWrapper{
@FormParam("param1")
private String param1;
@FormParam("inners")
private List<MyInnerWrapper> inners;
//..getters setters
}
class MyInnerWrapper{
@FormParam("innerParam1")
private String innerParam1;
//.... getters setters
}
我有请求 POST 实体字符串:
param1=aaa&inners[0]["innerParam"]=bbb&inners[1]["innerParam"]=nnn
问题是我可以用@BeanParam注解获取父字段param1,但是我无法获取自定义classes的内部列表,为什么?如何处理常规 html 表单数组?我需要在端点中使用其内部 class 对我的 class 进行评估。我尝试了数组、对象列表,但没有任何效果。谢谢
据我所知,泽西岛不支持这种语法。如果要为 @FormParam
使用自定义类型,则至少需要满足 Javadoc 中列出的一种要求。一种选择是只使用带有 String 参数的构造函数。例如
public class MyInnerWrapper {
private final String innerParam;
public MyInnerWrapper(String param) {
this.innerParam = param;
}
public String getInnerParam() {
return innerParam;
}
}
那么您需要做的就是发送这个请求
param1=blahparam&inners=first&inners=second&inners=third
那你可以
@FormParam("inners")
private List<MyInnerWrapper> inners;
不需要 []
来指定索引。允许重复。这就是为什么我们可以使用 @FormParam
类型的列表和数组。
现在,如果您想拥有多个 属性,然后尝试像现在这样映射它们,我认为这行不通。至少在泽西岛没有。如果您需要更复杂的类型,我建议您考虑使用 JSON。否则就坚持使用简单的键。