gpt4 book ai didi

java - Spring 验证错误的文档

转载 作者:太空宇宙 更新时间:2023-11-04 12:51:24 25 4
gpt4 key购买 nike

Spring 始终提供非常有用的默认值来处理验证错误。但有时定制这些看起来很困难。就我而言,我有一个自定义验证,它使用 JavaScript 函数来验证域对象中的字段。默认验证错误会生成 4 个消息代码,分别使用对象名称、字段名称、字段类型和验证类型。到目前为止,一切都很好。但我想添加一个额外的代码,其中包含 js 函数的名称作为组件。我怎样才能做到这一点?

或更笼统地说,我的问题是:在哪里可以找到有关 Spring 构建默认错误消息的方式以及如何操作它们的文档。

就我而言,我得到的输出如下:

{
"timestamp": 1457092927829,
"status": 400,
"error": "Bad Request",
"exception": "org.springframework.web.bind.MethodArgumentNotValidException",
"errors": [
{
"codes": [
"JSValidated.order.validFrom",
"JSValidated.validFrom",
"JSValidated.java.time.ZonedDateTime",
"JSValidated"
],
"arguments": [
{
"codes": [
"order.validFrom",
"validFrom"
],
"arguments": null,
"defaultMessage": "validFrom",
"code": "validFrom"
},
"checkOrder",
"static/OrderValidator.js"
],
"defaultMessage": "validation checkValidFrom failed",
"objectName": "order",
"field": "validFrom",
"rejectedValue": 1196586930,
"bindingFailure": false,
"code": "JSValidated"
},
{
"codes": [
"NotEmpty.order.id",
"NotEmpty.id",
"NotEmpty.java.lang.String",
"NotEmpty"
],
"arguments": [
{
"codes": [
"order.id",
"id"
],
"arguments": null,
"defaultMessage": "id",
"code": "id"
}
],
"defaultMessage": "may not be empty",
"objectName": "order",
"field": "id",
"rejectedValue": null,
"bindingFailure": false,
"code": "NotEmpty"
}
],
"message": "Validation failed for object='order'. Error count: 2",
"path": "/order"
}

如何添加或更改代码?如何添加或更改参数列表?所有内容都记录在哪里?

最佳答案

您可以使用@ExceptionHandler来使用全局异常处理程序您可以定义应处理哪些异常。您可以访问引发的异常,其中还包含验证错误。创建您自己的错误类,其中包含您要返回的属性。将验证错误映射到您的错误对象中,并将其与您选择的 HTTP 状态一起返回。BindingException 是我从验证中得到的一个异常,处理程序如下所示:

@ExceptionHandler(BindException.class)
@ResponseBody
public ResponseEntity<Object> handle(HttpServletRequest req, BindException ex) {
ExceptionResponse response = new ExceptionResponse(ex);
return new ResponseEntity<>(response, HttpStatus.EXPECTATION_FAILED);
}

以及错误类 ExceptionResponse :

@JsonInclude(Include.NON_NULL)
@JsonAutoDetect(fieldVisibility = Visibility.ANY, getterVisibility = Visibility.NONE, setterVisibility = Visibility.NONE)
public static class ExceptionResponse{
String exception;
String message;
String trace;
public ExceptionResponse(Exception exception) {
super();
this.exception = exception.getClass().getName();
this.message = exception.getMessage();
this.trace = Arrays.toString(exception.getStackTrace());
}

关于java - Spring 验证错误的文档,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35798015/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com