在我的控制器中,我使用@Valid
注释注释了request参数,并使用@NotNull
注释注释了我的DTO字段,但验证似乎不起作用。
是否有任何配置要进行验证?以下是Controller和DTO课程的详细信息。
@RepositoryRestController
@RequestMapping(value = "/download_pdf")
public class PurchaseController {
@Autowired
private IPurchaseService iPurchaseService;
@Loggable
@RequestMapping(value = "view_order", method = RequestMethod.POST)
public ResponseEntity getPDF(@RequestBody @Valid CustomerOfferDto offer,
HttpServletResponse response) {
return iPurchaseService.purchase(offer, response);
}
}
public class CustomerOfferDto {
@NotNull
private String agentCode;
// getter and setter...
}
答案 0 :(得分:1)
在我的项目中,这通常发生在我将代码从说Entity
更改为DTO
而忘记将@ModelAttribute
添加到我的DTO
参数中时。
如果您也遇到这种情况,请尝试将@ModelAttribute("offer")
添加到您的DTO
参数中。
答案 1 :(得分:0)
以下是我为使其工作所做的步骤。
添加依赖:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-validation</artifactId>
</dependency>
DTO 类中的约束:
@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
@ValidTaskDTO
public class TaskDTO {
@FutureOrPresent
@NotNull(message = "DueDate must not be null")
private ZonedDateTime dueDate;
@NotBlank(message = "Title cannot be null or blank")
private String title;
private String description;
@NotNull
private RecurrenceType recurrenceType;
@Future
@NotNull(message = "RepeatUntil date must not be null")
private ZonedDateTime repeatUntil;
}
在 requestBody 参数上带有 @Valid
注释的 RestController 方法:
@RestController
@RequestMapping("/tasks")
@Validated
public class TaskController {
@PostMapping
public TaskDTO createTask(@Valid @RequestBody TaskDTO taskDTO) {
.....
}
}
在使用包含 POST
的 null
值的 requestbody 发出 dueDate
请求时,我收到了如下所示的预期错误消息。
{
"timestamp": "2021-01-20T11:38:53.043232",
"status": 400,
"error": "Bad Request",
"message": "DueDate must not be null"
}
我希望这会有所帮助。有关类级别约束的详细信息,请查看 this video。