-->

该验证程序(@Validated @Valid)不使用Spring和TomEE工作(The vali

2019-10-30 05:08发布

验证不使用Spring和TomEE没有Maven的或批改作业。

我创建了一个基本的项目。 当我输入不正确的数据,验证根本什么都不做(没有错误,没有日志,没有neite)。

没有有效的。 它不验证的RET服务的参数。 它不验证所创建的DTO。 我想在很多方面。

我要疯了帮助我,请。

import javax.validation.constraints.Max;
import javax.validation.constraints.Min;
import javax.validation.constraints.NotNull;
import javax.validation.constraints.Pattern;
import javax.xml.bind.annotation.XmlElement;
import javax.xml.bind.annotation.XmlRootElement;

@NotNull
public class PersonaDTO  {


    @Min(0)
    @Max(270)
    private int eta;

    @Pattern(regexp = "[A-Z]+[a-z][a-z]+")
    private String Cognome;

    @Pattern(regexp = "[A-Z]+[a-z][a-z]+")
    private String Nome;


    @Max(240)
    @Min(80)
    private int altezza;


    public PersonaDTO() {
    }


    public PersonaDTO( String cognome, String nome,int eta, int altezza) {
        this.eta = eta;
        Cognome = cognome;
        Nome = nome;
        this.altezza = altezza;
    }

    public String getCognome() {
        return Cognome;
    }

    public void setCognome(String cognome) {
        Cognome = cognome;
    }

    public String getNome() {
        return Nome;
    }

    public void setNome(String nome) {
        Nome = nome;
    }

    public int getAltezza() {
        return altezza;
    }

    public void setAltezza(int altezza) {
        this.altezza = altezza;
    }

    public int getEta() {
        return eta;
    }

    public void setEta(int eta) {
        this.eta = eta;
    }
}


package it.paolo.spring.rest;

@RestController
@Validated
public class RestSpring {

       @RequestMapping(value = "/crea/{cogome}/{nome}/{eta}/{altezza}",
                        produces = "application/json"
         )
        @Validated  @Valid
        public  PersonaDTO creaPersona(
                @PathVariable("cogome") @Pattern(regexp = "[A-Z]+[a-z][a-z]+") @Valid String strCognome,
                @PathVariable("nome") @Valid @Pattern(regexp = "[A-Z]+[a-z][a-z]+") String strNome,
                @PathVariable("eta") int intEta,
                @PathVariable("altezza") int intAletezza
        ) {

                PersonaDTO persona=new PersonaDTO(strCognome,strNome,intEta,intAletezza);

                return persona;
        }

}

Answer 1:

@PathVariable并不意味着为了发回一个可读的消息给用户,以进行验证。 作为原则pathVariable不应该是无效的。

如果pathVariable是无效的原因可能是一个bug产生的不良URL(JSP中例如一个href)。 没有@Valid需要,并没有消息需要,刚修好的代码;

“用户”正在操纵的URL。 同样,没有@Valid是需要的,应给予用户没有有意义的消息。

在这两种情况下,只留下一个异常的泡沫,直到它由通常的春天的ExceptionHandlers以便产生一个不错的错误页面或指示错误有意义的JSON响应逮住。 为了得到这样的结果,你可以使用自定义编辑器做一些验证

还是你想验证PathVariable可以使用org.springframework.validation.annotation.Validated为有效RequestParamPathVariable

初始化ValidationConfig

@Configuration
public class ValidationConfig {
    @Bean
    public MethodValidationPostProcessor methodValidationPostProcessor() {
        MethodValidationPostProcessor processor = new MethodValidationPostProcessor();
        return processor;
    }
}

添加@Validated到控制器处理程序类 ,主要有:

@RestController
@Validated
public class RestSpring {
....
}

添加验证到您的处理方法

@RequestMapping(value = "/crea/{cogome}/{nome}/{eta}/{altezza}", produces = "application/json")
  public  PersonaDTO creaPersona(
                @PathVariable("cogome") @Pattern(regexp = "[A-Z]+[a-z][a-z]+") @Valid String strCognome,
                @PathVariable("nome") @Valid @Pattern(regexp = "[A-Z]+[a-z][a-z]+") String strNome,
                @PathVariable("eta") int intEta,
                @PathVariable("altezza") int intAletezza) 
                {

                PersonaDTO persona=new PersonaDTO(strCognome,strNome,intEta,intAletezza);

                return persona;
        }


文章来源: The validators (@Validated @Valid) do not work with Spring and TomEE
标签: spring tomee