РЕШЕНИЕ
1) Теоретически, если бы я выполнял представление формы (например, $('#myForm').submit()
), я мог бы использовать @ModelAttribute
, чтобы автоматически связать мою форму с компонентом. Вот что делает @ModelAttribute
- он используется для отправки формы. У меня нет настоящей формы; только мои собственные значения.
Я все еще мог «подделать» отправку формы, создав динамическую форму «на лету», но не смог получить отправку формы в массивном поле (например, obj[]
с нотацией []
в HTML Имя) для сопоставления с @ModelAttribute List<Bean>
, поэтому я проигнорировал этот необычный подход к отправке формы.
2) Реальный подход, который сработал, состоит в том, чтобы просто передать пользовательскую строку JSON, которая является моей собственной. Не связана с отправкой формы, поэтому не может использовать @ModelAttribute
. Вместо этого это @RequestBody
подход. Затем я должен сам проанализировать строку JSON RequestBody - и здесь мы должны использовать Jackson, Java JSON или GSON для анализа массива JSON.
В моем случае
JS:
$.ajax({
type : "post",
dataType : 'json',
url : 'addAdmin',
data : JSON.stringify(entries)
})
Контроллер (обратите внимание, что требуется пользовательская строка только). Затем он использует Джексон для анализа строки вручную, потому что Spring не сделает этого в этом случае. (Spring будет выполнять автоматический анализ, только если вы используете @ModelAttribute
привязку формы.)
@PostMapping("/addAdmin")
public boolean addAdmin(@RequestBody String json) throws Exception {
String decodedJson = java.net.URLDecoder.decode(json, "UTF-8");
ObjectMapper jacksonObjectMapper = new ObjectMapper(); // This is Jackson
List<UserRolesGUIBean> userRolesGUIBeans = jacksonObjectMapper.readValue(
decodedJson, new TypeReference<List<UserRolesGUIBean>>(){});
// Now I have my list of beans populated.
}