作为标题,
我使用angularjs提交
我的春季控制员:
@RequestParam(value = "hashtag[]") hashtag[] o
上面的适用于数组参数但不适用于数组对象
我的js脚本:
$http({
method: 'POST',
url: url,
data: $.param({
hashtag : [{label:"success",value:"ok"},{label:"success",value:"ok"},{label:"success",value:"ok"}],
}),
headers: { 'Content-Type': 'application/x-www-form-urlencoded' } });
我从chrome观察到,表格数据是
hashtag[0][label]:success
hashtag[0][value]:10
hashtag[1][label]:success
hashtag[2][value]:10
hashtag[3][label]:success
hashtag[3][value]:10
但春天告诉我
org.springframework.web.bind.MissingServletRequestParameterException: Required hashtag[] parameter 'id[]' is not present
以前我能够接收一系列参数,但不是一个对象。那么有人可以启发我吗?
答案 0 :(得分:0)
尝试使用@ModelAttribute
创建一个新的Java类HashtagList,如下所示
public class HashTagList {
private List<HashTag> hashTag;
public List<HashTag> getHashTag() {
return hashTag;
}
public void setHashTag(List<HashTag> hashTag) {
this.hashTag = hashTag;
}
}
并在您的控制器方法中
@ModelAttribute("hashtag") HashTagList hashTagList
是java类名称hashtag还是HashTag?
答案 1 :(得分:0)
尝试@RequestParam(value =“hashtag”)hashtag [] o
鉴于您有一个名为hashtag havinf label和value attributes的类。
答案 2 :(得分:0)
因为它是一个POST请求,您可以使用@RequestBody
注释并创建一个DTO类来映射您要发送的数据,甚至可以使用您的域对象。
例如,为什么不创建可以保存key-&gt;值对的可重用POJO类,如:
@JsonPropertyOrder({"label", "value"})
public final class Pair<K,V> implements Map.Entry<K,V>, Serializable {
private final K key;
private final V value;
@JsonCreator
public Pair(@JsonProperty("label")K key, @JsonProperty("value")V value) {
this.key = key;
this.value = value;
}
// ... rest of the implementation
}
注意:我假设您使用的是杰克逊映射器,因此使用了JSON注释。 下一步是获取将保存您从客户端发送的数据结构的类:
public class HashTags implements Serializable {
List<Pair<String, String>> hashtag = new ArrayList<>();
// ... rest of the implementation
}
然后在您的控制器中,您将需要执行以下操作:
@RequestBody HashTags entity