我正在使用 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/