假设我要发送一个完整的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);
}
}