【问题标题】:The validators (@Validated @Valid) do not work with Spring and TomEE验证器 (@Validated @Valid) 不适用于 Spring 和 TomEE
【发布时间】:2019-01-01 18:00:42
【问题描述】:

验证器在没有 Maven 或 Grade 的情况下无法与 Spring 和 TomEE 一起使用。

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

没有有效的。 它不验证 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;
        }

}

【问题讨论】:

    标签: spring apache-tomee


    【解决方案1】:

    @PathVariable 并不是为了向用户发送回可读消息而进行验证。作为原则,pathVariable 永远不应该是无效的。

    如果 pathVariable 无效,原因可能是错误生成了错误的 url(例如 jsp 中的 href)。不需要@Valid,也不需要消息,修复代码即可;

    “用户”正在操作 url。同样,不需要@Valid,也不应向用户提供有意义的消息。

    在这两种情况下,只要让一个异常冒泡,直到它被通常的 Spring ExceptionHandlers 捕获,以便生成一个漂亮的错误页面或一个有意义的 json 响应来指示错误。 为了得到这个结果,您可以使用自定义编辑器进行一些验证

    您仍然想验证 PathVariable 您可以使用org.springframework.validation.annotation.Validated 来验证RequestParamPathVariable

    初始化验证配置

    @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;
            }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-11-28
      • 2016-07-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-11-11
      • 1970-01-01
      相关资源
      最近更新 更多