我已经在这个问题上卡住了一段时间。我正在使用LocalDate通过REST端点接受来自用户的日期输入。我想验证这个日期,以检查它是null、empty字符串还是invalid日期,例如Feb 30。我已经设法让它在有效的日期值下工作,但是在无效输入的情况下,它抛出了400 Bad Request作为响应,它来自Java的内部类,所以我对它没有任何控制。如果你能让我知道,如果我遗漏了什么或做错了什么,我将非常感谢。
这在我的控制器中被称为方法-用@Valid注解:
@RequestMapping(method = RequestMethod.PUT, value="/add")
public ResponseEntity<PSResponse> add(@Valid @RequestBody PSRequest request) throws Exception {
setServiceID(SERVICE_HANDLER_ID);
request.setRequestType("add");
PSResponse response = (PSResponse) invokeInternal(request);
}这是我的请求对象的类
public class PSRequest {
@NotNull(message = "fromDate cannot be null")
protected LocalDate fromDate;
@NotNull(message = "toDate cannot be null")
protected LocalDate toDate;}有效的JSON输入
"fromDate":2020-10-16"
"toDate":"2021-10-16"无效的JSON输入日期格式
"fromDate":null,
"toDate":"2021-02-30"谢谢!
发布于 2021-10-28 16:26:16
你所做的一切都没有错,得到一个400 bad request是很正常的。为什么?因为您使用的是基于Http协议的Rest端点
Bad request表示您的Http请求不正确,原因有很多,例如:无效参数。最佳实践是向用户发送一条明确的消息,解释在他发送到服务器的请求之后发生了什么。为此,您可以使用RestControllerAdvice截获所有异常并将其映射到Http状态代码。
有关更多详细信息,请查看this post。
发布于 2021-10-28 16:18:28
为了抑制内置验证,您可以从前端接收String,然后才执行您的代码:LocalDate.parse(fromDate),捕获DateTimeParseException并按您希望的方式处理它。
另一种选择是删除@Valid
顺便问一下,@Valid出了什么问题?你就不想要400块钱吗?!或者你想用400控制正文信息?
https://stackoverflow.com/questions/69757383
复制相似问题