gpt4 book ai didi

java - 如何从 MethodArgumentNotValidException 类中提取字段名称和错误消息?

转载 作者:行者123 更新时间:2023-12-01 14:33:07 26 4
gpt4 key购买 nike

我正在使用 javax.validation.Size 注释来执行字符串大小验证。

@Data
public class EventRequestBean {

@Size( max = 40 )
private String title;

@Size( max = 50 )
private String topic;
}

我正在使用全局异常处理程序将自定义异常抛出到客户端。

@ExceptionHandler( { MethodArgumentNotValidException.class } )
public final ResponseEntity handleException( Exception e, WebRequest request )
{
if( e instanceof MethodArgumentNotValidException )
{
MethodArgumentNotValidException exception = (MethodArgumentNotValidException) e;
String parameterName = exception.getParameter().getParameterName();
// return buildError(new DataException(GeneralConstants.EXCEPTION, "Invalid content length: field +"e))

return null;
}

return null;
}

在我的自定义异常 DataException 中,第二个参数是错误消息。我想将字段名称和有效大小限制设置为消息。

我试图从抛出的异常中获取字段名称,但它没有给我名称 title,而是给我正在使用的参数名称 eventRequestBean在抛出此异常的 Controller 中。

@PostMapping( "/event" )
public ResponseEntity createEvent( @Valid @RequestBody EventRequestBean eventRequestBean )
{
try
{
log.info(GeneralConstants.LOGGER_CONSTANT,
" Entered create event controller, path:rest/events/event - POST");
userCommons.throwExceptionForOtherThanAdminUser(getLoggedInUser());
return buildResponse(eventService.addEvent(eventRequestBean, getLoggedInUser()));
}
catch( DataException e )
{
return buildError(e);
}
}

如何获取字段名称和设置的有效大小,以便创建自己的自定义异常?

最佳答案

@ExceptionHandler( { MethodArgumentNotValidException.class } )
public final ResponseEntity handleException( Exception e, WebRequest request )
{
if( e instanceof MethodArgumentNotValidException )
{
MethodArgumentNotValidException exception = (MethodArgumentNotValidException) e;
List<ObjectError> allErrors = exception.getBindingResult().getAllErrors();

StringBuilder errorMessage = new StringBuilder("");

for( ObjectError error : allErrors )
{
errorMessage.append(error.getDefaultMessage()).append(";");
}
return buildError(
new DataException(GeneralConstants.EXCEPTION, errorMessage.toString(), HttpStatus.BAD_REQUEST));
}

return null;
}

首先,您需要提供带有大小限制的错误消息,如下所示,

@Data
public class EventRequestBean {

@Size( max = 40, message = "The value '${validatedValue}' exceeds the max limit of {max} characters" )
private String title;

@Size( max = 50, message = "The value '${validatedValue}' exceeds the max limit of {max} characters" )
private String topic;
}

现在,在异常处理程序中,您可以通过点击异常的 BindingResult 属性来访问错误消息,如上所述。

关于java - 如何从 MethodArgumentNotValidException 类中提取字段名称和错误消息?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59732327/

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