gpt4 book ai didi

spring-boot - Spring 验证返回长错误消息,而不仅仅是自定义消息

转载 作者:行者123 更新时间:2023-12-03 23:22:01 24 4
gpt4 key购买 nike

Spring 验证返回长错误消息而不是自定义一次。

这是 dto 中的代码部分。

public class RequestDto implements Serializable {
@NotNull(message="{id.required}")
private Long id;

}

在 Controller 中为输入添加了@Valid。
@RequestMapping(value = ApiPath.PATH, method = RequestMethod.POST, produces = { "application/xml",
"application/json" })
public @ResponseBody ResultDecorator saveRequest(
@Valid @RequestBody RequestDto msaDisabScreenRequestDto) throws Exception {

}

API 返回以下错误。
<message>Validation failed for argument at index 0 in method: public om.gov.moh.msa.framework.resolver.ResultDecorator om.controller.MaController.saveRequest(om..dto.RequestDto) throws java.lang.Exception, with 1 error(s): [Field error in object 'requestDto' on field 'id': rejected value [null]; codes [NotNull.requestDto.id,NotNull.id,NotNull.java.lang.Long,NotNull]; arguments [org.springframework.context.support.DefaultMessageSourceResolvable: codes [requestDto.id,id]; arguments []; default message [civilId]]; **default message [ID is required.]]** </message>

这里自定义消息出现在最后。 ( 默认消息 [ID 是必需的。 )

对全局异常使用 Controller 建议,我正在覆盖 handleMethodArgumentNotValid。如何在此处仅返回自定义消息?
@Order(Ordered.HIGHEST_PRECEDENCE)
@ControllerAdvice
public class RestExceptionHandler extends ResponseEntityExceptionHandler {



/**
* Spring validation related exception
*/
@Override
protected ResponseEntity<Object> handleMethodArgumentNotValid(
MethodArgumentNotValidException ex,
HttpHeaders headers,
HttpStatus status,
WebRequest request) {

ApiError apiError = new ApiError(HttpStatus.BAD_REQUEST);
apiError.setMessage(ex.getMessage());
return buildResponseEntity(apiError);
}
}

最佳答案

您可以获得默认/自定义消息,如 result.getFieldError("yourFieldName").getDefaultMessage()
您可以通过 Controller 方法捕获错误消息,该方法应如下所示

    @RequestMapping(value = ApiPath.PATH, method = RequestMethod.POST, produces = { "application/xml", "application/json" })
public @ResponseBody ResultDecorator saveRequest(@Valid @RequestBody RequestDto msaDisabScreenRequestDto, BindingResult result) throws Exception {
if(result.hasErrors()){
String errorMessage = result.getFieldError("yourFieldName").getDefaultMessage();
}
}

或者通过全局异常处理程序

更新
    @Order(Ordered.HIGHEST_PRECEDENCE)
@ControllerAdvice
public class RestExceptionHandler extends ResponseEntityExceptionHandler {



/**
* Spring validation related exception
*/
@Override
protected ResponseEntity<Object> handleMethodArgumentNotValid(
MethodArgumentNotValidException ex,
HttpHeaders headers,
HttpStatus status,
WebRequest request) {

//New Code
BindingResult bindingResult = ex.getBindingResult();
String errorMessage = result.getFieldError("yourFieldName").getDefaultMessage();
//---------------
ApiError apiError = new ApiError(HttpStatus.BAD_REQUEST);
apiError.setMessage(errorMessage);
return buildResponseEntity(apiError);
}
}

关于spring-boot - Spring 验证返回长错误消息,而不仅仅是自定义消息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50737381/

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