SPRING ---如何向控制器提交一个对象数组

时间:2013-04-04 04:08:45

标签: javascript spring spring-mvc angularjs

作为标题,

我使用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

以前我能够接收一系列参数,但不是一个对象。那么有人可以启发我吗?

3 个答案:

答案 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