/ / SPRING - Как да изпратим масив от обект към контролер - javascript, spring, mvc, angularjs

ПРОЛЕТ - Как да подадете масив от обекти към контролера - 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

Преди имах възможност да получа масив от параметри, но не и обект. така може ли някой да ме просвети?

Отговори:

0 за отговор № 1

Опитайте @RequestParam (value = "hashtag") hashtag [] o

Като се има предвид, че имате клас с име hashtag havinf етикет и стойност атрибути.


0 за отговор № 2

Опитайте да използвате @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

Името на хавеста или HashTag на класа на java?


0 за отговор № 3

Тъй като това е POST заявка, която можете да използвате @RequestBody анотация и да създадете клас DTO, за да съпоставите данните, които изпращате, или дори да използвате обекта на домейна. Например, защо да не създадете повторно използван 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 mapper, следователно JSON анотациите. Следващата стъпка е да получите клас, който ще държи структурата на данните, която изпращате от вашия клиент:

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

Тогава във вашия контролер ще трябва да направите нещо като:

@RequestBody HashTags entity