Como o Spring 2.5 mapeia os dados de solicitação recebida para o comando modelattribute?
-
03-07-2019 - |
Pergunta
Eu usei a primavera 2.0 e agora estou usando o Spring 2.5, naturalmente, a primavera 2.5 facilitou a vida muito fácil no que diz respeito aos controladores da web. A pergunta continua vindo em minha mente de que, em 2.0, tivemos que definir a classe de comando e, portanto, o abstractFormController usado para preencher esse objeto de comando para nós. Na primavera 2.5, não fazemos isso, então como vem saber qual classe usar? Depende do tipo de parâmetro que anotamos o @modelattribute ("comando")?
Se sim, informe -me qualquer classe "Utils" que forneça o mecanismo exato em que eu possa passar no httprequest e no nome da classe (ou objeto de classe) e que me devolveria o objeto povoado!
Espero que você tenha conseguido minha pergunta.
Desde já, obrigado.
Solução
As anotações da Web MVC eventualmente dependem de um
org.springframework.beans.abstractpropertyAccessor
que tem duas implementações concretas:
org.springframework.beans.beanwrapperImpl org.springframework.beans.directfieldAccessor
Ambos aceitam um objeto Java, que será o alvo para definir as propriedades para.
O primeiro, o BeanWrapperImpl usa os métodos Setter/Getter de um objeto Java, enquanto o outro define os campos diretamente. Ambos os verifica se os métodos/campos são públicos/acessíveis e, se de outra forma, use o SetAccessible (true) da reflexão para garantir que ele possa ser definido.
A partir do MVC da Web, uma instância do AbstractPropertyAccessor é criada e o mapa de parâmetros de uma httprequest é passado para o AbstractPropertyAccessor#setPropertyValues.
Após a chamada, o objeto Java é preenchido com o que estiver no mapa