Introdução
A verificação da anotação usando o Spring MVC pode verificar diretamente os dados simples do modelo de exibição. Observe que isso é simples. Se a verificação de dados do modelo exigir uma lógica de negócios mais complexa, é difícil usar a anotação para verificação.
A seguir, a verificação da anotação usando o Spring MVC, além de um exemplo de verificação de anotação do @Tel, que possui:
1. Suporte multilíngue (internacionalização)
2. Converta os dados padrão primeiro. Por exemplo, se um tipo int e de data for passado em um valor vazio, uma exceção será lançada. O valor padrão dado será fornecido.
Vejamos a configuração primeiro:
1. Web.xml
<?xml version="1.0" encoding="UTF-8"?><web-app version="3.0" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi: schemalocation = "http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee http://java.sun.com/xmls/javaee/http://java.sun.com/xmls/javaee/http://java.sun.com/xmls/javaee/http://java.sun.com/xmls/javaee/http://java.sun.com/xmls/javaee/http://java.sun.com/xmls/javaee/http://java.sun.com/xmls/javaee/http://java.sun.com/ 1</display-name> <context-param> <param-name>contextConfigLocation</param-name> <param-value>classpath:spring.xml</param-value> </context-param> <servlet> <servlet-name>dispatcher</servlet-name> <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> <init-param> <param-name>contextConfigLocation</param-name> <param-value></param-value> </init-param> <load-on-startup>1</load-on-startup> </servlet> <servlet-mapping> <servlet-name>dispatcher</servlet-name> <url-pattern>/</url-pattern> </servlet-mapping> <listener> <listener-class> org.springframework.web.context.contextLoaderListener </lister-class> </lister> <lorde-file-list> <lmed -file> index.jsp </ld-Welcome-file> </lding -file-list> </bile-App>
Não há nada a dizer aqui, basta adicionar a configuração spring.xml ao contextConfiglocation
2. Spring.xml
<? xml versão = "1.0" coding = "utf-8"?> <Beans xmlns = "http://www.springframework.org/schema/beans" xmlns: xsi = "http:/wwww.w3 xmlns: tx = "http://www.springframework.org/schema/tx" xmlns: context = "http://www.springframework.org/schema/Context" xmlns: mvc = "http://www.springframework.org/schema/mvc" xsi: schemalocation = "http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-3.0.xsd http://www.springframework.org/schema/context/spring-context-3.0.xsd http://www.springframework.org/schema/context/spring-context-3.0.xsd http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-3.0.xsd "> <!-anotação Descrição-> <Contexto: ANNOTATION-CONFIG/> <!-ANOTATION MAPPING SUPORTE-> <-MVC: ANNOTATIONGATATATATADOR =" ANOTATIONATATION "> Marcado @Controller Anotation to Bean-> <Contexto: componente-Scan Base-Package = "com.my"/> <!-Ver classe de interpretação-> <Bean> <Nome da propriedade "prefixo" value = "/Web-Inf/Views/"/> <Nome da propriedade = "Sufixo" o valor de JSP de Jsp de Jsp/!- name = "viewclass" value = "org.springframework.web.servlet.view.jstlview"/> </i bean> <!-Arquivo de recursos: messages.properties-> <bean id = "MessageSource"> <names name = "basenames"> <list> </Value </Value> </list> </lista "</list" id = "validator"> <propriedade name = "validationMessagesource" ref = "messageSource"/> </i bean> <!-conversor de tipo de dados personalizado-> <bean id = "conversionService"> <names name = "conversores"> <list> <bean/> <bean/> </list> </propriedade> </bean>
Adicione o serviço de conversão a <mvc: anotação orientada/> e adicione o conversor padrão do sistema ao serviço de conversão. Por exemplo, existem IntConverter e DataConverter acima. Obviamente, também pode ser personalizado e outros tipos, que são globais.
Propriedades multilíngues são adicionadas ao validador do validador. Obviamente, a linguagem multilíngue da primavera é baseada na linguagem de aceitação do cabeçalho HTTP.
3. Controlador
pacote com.my.controller; importar java.util.list; importar javax.validation.valid; importar org.springframework.tereotype.controller; importação org.springframework.validation.bindingResult; importação org.springframework.validation; org.springframework.web.bind.annotation.modelattribute; importar org.springframework.web.bind.annotation.requestMapping; importação org.springframework.web.bind.annotation.requestmethod; importação; com.my.controller.bean.user4;@controlador@requestmapping (value = "av") public classe testannotationValidController {@RequestMapping public ModelAndView Index () {ModelAndView View = new ModelAndView ("/testannotationValid/Índice", "User4", User4 (); Visão de retorno; } @ReQuestMapping (value = "/add", método = requestMethod.post) public ModelAndView Add (@modelattribute @Valid User4 User4, resultado BindingResult) {ModelAndView View = new ModelAndView ("/testannotationValid/index"); view.addObject ("user4", usuário); if (result.haserrors ()) {list <fielderror> erros = resultado.getfielderrors (); para (fielderror err: erros) {system.out.println ("objectName:" + err.getObjectName () + "/tfieldName:" + err.getfield () + "/tfieldValue:" + err.getRejectValue () + "/tmessage:" + err.getDefaultMess. }} retornar visualização; }}Este é um controlador simples, adicionado, há uma anotação de @valid, o que é necessário, sem adicionar isso, a verificação da anotação não funcionará
4. User4.java Model Entity Class
pacote com.my.Controller.Bean; importar java.util.date; importar javax.validation.constraints.max; importar javax.validation.constraints.min; import javax.validation.constraints.notnull; import javax.validation.chestrants.past; importation javanstation.NotNull; Importumation.validation.CanstAnts.Paxtation; javax.validation.constraints.size; importar org.hibernate.validator.constraints.mail; importar org.hibernate.validator.constraints.length; importar org.hibernate.validator.constraints.notblank; public class User4 {private Long id; @NotBlank (message = "{Valid.name}") Nome da String Private; @Length (min = 4, max = 20, message = "{Valid.password}") Private String senha; @NotBlank (message = "{Valid.Required}") @email (message = "{Valid.email}") email de sequência privada; @NotNull (message = "{Valid.Required}") Private Boolean casado; @Min (value = 18, message = "{Valid.agemin}") @max (value = 100, message = "{Valid.ageMax}") private Int Age; @NotNull (message = "{Valid.Required}") @Past (message = "{Valid.birthday}") Data privada aniversário; @Pattern (regexp = "^[a-za-z] {2,} $", message = "{Valid.address}") endereço da sequência privada; @Size (min = 1, message = "{Valid.likesmin}") private String [] curtidas; @com.my.controller.validator.tel (message = "{Valid.tel}", min = 3) private String tel; public Long getId () {return id; } public void setId (longo id) {this.id = id; } public string getName () {return name; } public void setName (nome da string) {this.name = name; } public string getPassword () {return senha; } public void setPassword (string senha) {this.password = senha; } public String getEmail () {retornar email; } public void setEmail (string email) {this.email = email; } public boolean isMarried () {return casado; } public void setMarried (boolean casado) {this.Married = casado; } public int getage () {Age de retorno; } public void setage (int Age) {this.age = Age; } public data getBirthday () {return Birthday; } public void setbirthday (data de aniversário) {this.birthday = aniversário; } public string getAddress () {retornar endereço; } public void setAddress (endereço da string) {this.address = endereço; } public string [] getlikes () {return likes; } public void setlikes (string [] gosta) {this.likes = curtidas; } public string gettel () {return tel; } public void Settel (String Tel) {this.Tel = Tel; }}Além do @Tel, os outros são anotações que vêm com a primavera. Claro, existem outros. Procure você mesmo.
5. message.properties
válido.Required = O valor do campo não pode estar vazio válido.name = o nome do usuário não pode estar vazio válido.password = a senha mínima é válida.agemin = idade não pode ser menor que {1} anos de idade válida.ageMax = idade não pode ser maior que o {1} anos de idade. A preferência não pode ser menor que 1 válida.tel = O número do telefone celular não pode ser menor que {min}O valor correspondente da mensagem da anotação do modelo do usuário4. Se você precisar de um multilíngue internacional, só precisará adicionar um arquivo adicional com o nome de Message_en_Us.Properties.
6. @Tel
pacote com.my.controller.validator; importar java.lang.annotation.ElementType; importar java.lang.annotation.retention; importar java.lang.annotation.retentionpolicy; import java.lang.annotation.target; importação javax.validation.COMNOSTRANTANTANTANTANTANTION; javax.validation.payload; @target ({elementType.field, elementType.method})@retention (retentionpolicy.runtime) @constraint (validadoBy = telValidator.class) public @Interface tel {int min () padrão 0; String message (); Classe <?> [] Grupos () padrão {}; Classe <? estende a carga de pagamento> [] Payload () padrão {};}Crie uma nova interface. Observe que a interface de anotação Java está escrita assim: @Interface
Telvalidador:
pacote com.my.Controller.Validator; importar javax.annotation.resource; importar javax.validation.constraintValidator; importar javax.validation.constraintValidatorContext; importador org.springframework.Clounts.Suport.ResourcendMessages @Resource Private ResourceBundLemessagesOrce Mensesource; Privado Tel Tel; @Override public void Initialize (tel) {this.tel = Tel; } @Override public boolean iSValid (valor da string, restrintValidatorContext restantContext) {boolean isValid; if (valor! } else {isValid = false; } if (! isValid) {restrintContext.disableDefaultConstraintviolation (); restrintcontext.buildconstraintviolationwithtemplate (tel.message ()). addConstraintviolation (); } retornar isValid; }}Este é o método de implementação de verificação da @Tel.
7. conversor
pacote com.my.controller.converter; importar org.springframework.core.convert.converter.converter; public class IntConverter implementa converter <string, número inteiro> {@Override public integro convert (string text) {if (text == null | } else {try {integer value = integer.parseint (text); valor de retorno; } catch (Exceção e) {return 0; }}}} pacote com.my.controller.converter; importar java.text.parseException; importar java.text.simpledateFormat; importar java.util.date; importar org.springframework.core.convert.converter.Converter; public class Dateterter (Data Date) DateFormat = new SimpleDateFormat ("AAAA-MM-DD"); dateFormat.setLenient (false); tente {return dateFormat.parse (text); } catch (parseException e) {e.printStackTrace (); } retornar nulo; }}Esses dois são conversores padrão do tipo global.
8. Teste JSP
<%@ página linguagem = "java" contentType = "text/html; charset = utf-8" pageEncoding = "utf-8"%> <%@ taglib uri = "http://java.sun.com/jsp/jstl/core" prefix = "c"%> taglib@ taglib uri = "http://java.sun.com/jsp/jstl/fmt" prefix = "fmt"%> <%@ taglib uri = "http://java.sun.com/jsp/jstl/functions" prefix = "fn" "%>@ taglib uri = "http://www.springframework.org/tags"%> <%@ taglib prefix = "sf" uri = "http://www.springframework.org/tags/form"%<! "http://www.w3.org/tr/html4/loose.dtd"><html> <head><meta http-equiv =" content-type "content =" text/html; charset = utf-8 "> <title> ÍNDICE </title> </body> <corpo> action = "$ {PageContext.Request.ContextPath}/av/add" method = "post" modelAttribute = "user4"> Nome do usuário: <sf: entrada de caminho = "name"/> <sf: errors = "name"/> <br/> senha: <sf: input = "senha"/> path="email" /><sf:errors path="email" /><br/> Age:<sf:input path="age"/><sf:errors path="age" /><br/> Birthday:<sf:input path="birthday"/><sf:errors path="birthday" /><br/> Address:<sf:input path="address"/><sf:errors path="address" /> <br/> Casado: <sf: radiobutton path = "casado" etc. = "sim" value = "true"/> <sf: erros path = "casado"/> <br/> gosta: <sf: checking path = "likes" rótulo "" futebol "=" futebol "/> <sf: caixa de seleção"/"likes" = "badm" "" Path = "gosta" de "etiqueta =" pingpong "value =" pingpong "/> <sf: erros path =" curtirs "/> <br/> Tel: <sf: entrada path =" tel "/> <sf: errrors path =" tel "/> <br/> <input type =" submit "=" sd: add = "tel"/> <br/> <input type = "submit" = "s"/> <Hr/> Path = "*"> </sf: erros> <hr/> gosta: <c: foreach itens = "$ {user4.likes}" var = "item"> $ {item}, </c: foreach> </sf: form> </body> </html>Observe que o valor do atributo ModelAttribute no formulário corresponde ao nome da classe Usuário4, começando com o minúsculo, caso contrário, ocorrerá um erro.
9. Resultados da interface do usuário da página:
Depois de clicar no botão Adicionar:
O exposto acima é todo o conteúdo deste artigo. Espero que seja útil para o aprendizado de todos e espero que todos apoiem mais o wulin.com.