pergunta
A anotação @ModelAttribute aceita o parâmetro json passado pelo carteiro mas não consegue receber o valor.Na verdade eu não conheço muito sobre @ModelAttribute, então apenas pesquisei!
@RequestMapping("/test")
public String test(@ModelAttribute("user") User user2) {
System.out.println("user2"+JSON.toJSONString(user2));
return "test";
}
Dessa forma, os dados JSON passados pelo carteiro não podem ser recebidos.
Na verdade, é principalmente devido à compreensão insuficiente do uso de @ModelAttribute.
A anotação @ModelAttribute pode ser usada em métodos e parâmetros de método.
- Anotado no método
O método anotado por @ModelAttribute será executado antes de cada método deste controlador ser executado. Portanto, para o uso de um controlador mapeando vários URLs, use-o com cuidado. - @ModelAttribute anota os parâmetros de um método.
Existem dois casos para anotar os parâmetros do método
a. Obtidos do modelo, por exemplo da seguinte forma:
@ModelAttribute("user")
public void addUser(@RequestBody User user, Model model) {
System.out.println("ModelAttribute:"+1);
model.addAttribute(user);
}
/**
* test
* @return string
*/
@RequestMapping("/test")
public String test(@ModelAttribute("user") User user2) {
System.out.println("user2"+JSON.toJSONString(user2));
return "test";
}
Entre eles, addUser tem outra forma de escrever
public User addUser(@RequestBody User user) {
System.out.println("ModelAttribute:"+1);
return user;
}
Neste exemplo, @ModelAttribute("user") User user2 anota o parâmetro do método e o valor do parâmetro user vem do atributo model no método addUser().
b. Obtenha-o do formulário Form ou dos parâmetros de URL (na verdade, você pode obter o objeto de usuário sem este comentário)
@RequestMapping("/test")
public String test(@ModelAttribute("user") User user2) {
System.out.println("user2"+JSON.toJSONString(user2));
return "test";
}
Como o problema acima é receber dados no formato JSON, b não pode satisfazer a situação. A solução que comecei a pensar foi adicionar @RequestBody
como abaixo:
@RequestMapping("/test")
public String test(@RequestBody @ModelAttribute("user") User user2) {
System.out.println("user2"+JSON.toJSONString(user2));
return "test";
}
Então descobri que não funciona de jeito nenhum, então só posso usar um. Pegue no modelo!
Então tenho a seguinte solução:
public User addUser(@RequestBody User user) {
System.out.println("ModelAttribute:"+1);
return user;
}
@RequestMapping("/test")
public String test(@RequestBody @ModelAttribute("user") User user2) {
System.out.println("user2"+JSON.toJSONString(user2));
return "test";
}