Spring Boot
@RestController
public class ProductsController {
@PostMapping("/product")
public ResponseEntity<Product> createProduct(@RequestBody String payload) {
Product product = new Gson().fromJson(payload, Product.class);
checkProduct(product);
product.setCreated(new Date());
if (product.getPrice() == null) {
throw new InvalidParameterException("Invalid price");
}
logger.info("createProduct: product:\n" + product);
return new ResponseEntity<Product>(product, HttpStatus.OK);
}
这是我的自定义异常处理程序InvalidParameterException:
@ControllerAdvice
public class CustomExceptionHandler extends ResponseEntityExceptionHandler {
@ExceptionHandler(InvalidParameterException.class)
protected ResponseEntity<Object> handleInvalidParameterException(InvalidParameterException ex,
WebRequest request) {
ErrorResponse error = new ErrorResponse(ex.getMessage());
return new ResponseEntity(error, HttpStatus.BAD_REQUEST);
}
@Override
protected ResponseEntity<Object> handleMethodArgumentNotValid(MethodArgumentNotValidException ex,
HttpHeaders headers, HttpStatus status,
WebRequest request) {
List<String> details = new ArrayList<>();
for(ObjectError error : ex.getBindingResult().getAllErrors()) {
details.add(error.getDefaultMessage());
}
ErrorResponse error = new ErrorResponse("Validation Failed", details);
return new ResponseEntity(error, HttpStatus.BAD_REQUEST);
}
}
但是当开始请求时没有价格:
# Create product without price
POST :BASE_URL:URL_SUFFIX/product
:HEADERS
{
"name": "product name_1"
}
响应为:
{
"timestamp": "2020-09-08T23:25:25.514+00:00",
"status": 500,
"error": "Internal Server Error",
"message": "",
"path": "/api/v1/product"
}
但是结果必须是:
{
"timestamp": "2020-09-08T23:25:25.514+00:00",
"status": 400,
"error": "Bad request",
"message": "Invalid price",
"path": "/api/v1/product"
}
为什么不正确的错误响应?
我遇到错误:
org.springframework.http.converter.HttpMessageNotWritableException: No converter found for return value of type: class myproject.model.ErrorResponse
at org.springframework.web.servlet.mvc.method.annotation.AbstractMessageConverterMethodProcessor.writeWithMessageConverters(AbstractMessageConverterMethodProcessor.java:230) ~[spring-webmvc-5.2.8.RELEASE.jar:5.2.8.RELEASE]
at org.springframework.web.servlet.mvc.method.annotation.HttpEntityMethodProcessor.handleReturnValue(HttpEntityMethodProcessor.java:219) ~[spring-webmvc-