设置通过邮差传递的不完整对象的错误消息



假设我要发送一个完整的Postman中的JSON对象就像下面的POST-end-point:

{
"student": [
{
"studentId" : "1234",
"feesPayment" : {
"amount" : 500.0,
"code" : "INR"
}
},
{
"studentId" : "5678",
"feesPayment" : {
"amount" : 500.0,
"code" : "INR"
}
}
]

}

则状态码为200 OK

但是现在,我正在发送相同的JSON对象,但在对象中进行了一些修改,例如下面的对象,用于相同的post结束点:(只是删除"feesPayment"对象)

{
"student": [
{
"studentId" : "1234"
},
{
"studentId" : "5678"
}
]
}

则状态码为500内部服务器错误原因很明显,错误如下所示:

{
"timestamp" : "2021-09-02T17:07:31",
"status" : 500,
"error" : "Internal Server Error",
"message" : "Internal Server Error"
}

对于这个500状态码,错误消息是"内部服务器错误"。所以我的问题是我如何将此错误信息设置为诸如"Fee Payment Details is missing"之类的内容?而不是默认的内部服务器错误信息?

方法/代码Java和SpringBoot是感激。

请查看

<dependency> 
<groupId>org.springframework.boot</groupId> 
<artifactId>spring-boot-starter-validation</artifactId> 
</dependency>

在你的Student类中,你可以这样写:

public class Student {
@NotNull(message = "Error-2596-Fees Payment is required")
private FeesPayment feesPayment;
}

在RestController中,您将发送带有@Valid注释的Student负载

public ResponseEntity<String> sendStudent(@Valid Student studentToSend) { }

消息必须是常量。如果你看一下注释的代码,你会看到它是

javax.validation.constraints.NotBlank.message

为默认值。您可以支持国际化并创建语言属性文件,然后将其定义为:

javax.validation.constraints.NotBlank.message = "Payment is required" 

的另一件事要考虑,也许是你想把许多错误并返回给用户。

对于这种情况,请查看ExceptionHandler:

@RestControllerAdvice
public class ExceptionHandler extends ResponseEntityExceptionHandler{
@Override
protected ResponseEntity<Object> handleMethodArgumentNotValid(MethodArgumentNotValidException ex,
HttpHeaders headers, HttpStatus status, WebRequest request) {
Map<String, Object> responseBody = new LinkedHashMap<>();
List<String> allErrors = new ArrayList<>();
ex.getBindingResult().getAllErrors().forEach(error -> allErrors.add(error.getDefaultMessage()));
responseBody.put("Errors:", allErrors);
return new ResponseEntity<>(responseBody, headers, status);
}
}

最新更新