0

如题,

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

以前我能够接收参数数组,但不能接收对象。所以有人可以启发我吗?

4

3 回答 3

0

试试@RequestParam(value = "hashtag") hashtag[] o

假设您有一个名为 hashtag 的类,具有标签和值属性。

于 2013-04-04T08:49:32.917 回答
0

因为它是一个 POST 请求,您可以使用@RequestBody注释并创建一个 DTO 类来映射您正在发送的数据,甚至可以使用您的域对象。例如,为什么不创建可以保存 key->value 对的可重用 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
}

注意:我在这里假设您使用的是 Jackson 映射器,因此是 JSON 注释。下一步是获取将保存您从客户端发送的数据结构的类:

public class HashTags implements Serializable {
    List<Pair<String, String>> hashtag = new ArrayList<>();
   // ... rest of the implementation
}

然后在您的控制器中,您将不得不执行以下操作:

@RequestBody HashTags entity
于 2013-09-30T17:19:22.493 回答
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 ?

于 2013-04-04T04:40:25.073 回答