提问人:Alex 提问时间:10/14/2023 更新时间:10/21/2023 访问量:43
带有 Validated 注解的 Springboot Jackson 验证不起作用
Springboot Jackson validation with Validated annotation not work
问:
我有这个API控制器接口:
ResponseEntity<OkDTO> internal(@RequestBody @Validated MassPostDTO dto , HttpServletRequest req) throws Exception;
以及这个 MassPostDTO 模型:
@IMassValidator
public class MassPostDTO implements Serializable {
private static final long serialVersionUID = 1L;
@Valid
@JsonProperty(value="idSub", required=false)
private String idSub;
....
如果你看到,我有@IMassValidator:
@Constraint(validatedBy = MassValidator.class)
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.TYPE)
public @interface IMassValidator {
String message() default "data";
Class<?>[] groups() default {};
Class<? extends Payload>[] payload() default {};
}
问题是,如果我在我的请求正文中将属性“idSub”声明为空, 例如 { “idSub”:null,“otherVars”:....... }我有一个杰克逊错误映射器:
Resolved [org.springframework.http.converter.HttpMessageNotReadableException: JSON parse error: null; nested exception is com.fasterxml.jackson.databind.JsonMappingException: N/A
at [Source: (PushbackInputStream); line: 1, column: 27] (through reference chain: MassPostDTO["idSub"])]
但是如果我的请求正文是: { “otherVars”: ....,... } 代码工作
我能做些什么来解决问题? 谢谢大家
答:
0赞
Jay Yadav
10/21/2023
#1
确保已将控制器类或接口注释为 和参数,并在项目中注释了参数。
按照下面的代码片段,它应该可以工作。@Validated
@Valid
spring-boot-starter-validation
@Validated
@RequestMapping(value = "/hello")
public interface OkDTO {
ResponseEntity<OkDTO> internal(@Valid @RequestBody MassPostDTO dto, HttpServletRequest req) throws Exception;
}
评论