在没有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;
}
}
答案 0 :(得分:0)
@PathVariable
并不意味着要进行验证才能将可读消息发送回用户。原则上,pathVariable永远不应无效。
如果pathVariable无效,则原因可能是错误生成了错误的URL(例如,jsp中的href)。不需要@Valid
,也不需要消息,只需修复代码;
“用户”正在操纵URL。同样,不需要@Valid
,也不应向用户提供有意义的消息。
在这两种情况下,只要留下异常气泡,直到被常规的Spring ExceptionHandlers捕获,即可生成漂亮的错误页面或有意义的json响应,指示错误。 为了获得此结果,您可以使用自定义编辑器进行一些验证
仍然要验证 PathVariable ,可以使用org.springframework.validation.annotation.Validated
来验证RequestParam
或PathVariable
Init 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;
}