Resumo da anotação do SpringBoot @ModelAttribute

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.

  1. 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.
  2. @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";
 }
 

Acho que você gosta

Origin blog.csdn.net/Youning_Yim/article/details/115835737
Recomendado
Clasificación