我正在使用REST api.收到带有不良
JSON的POST消息(例如{sdfasdfasdf})会导致Spring返回400错误请求错误的默认服务器页面.我不想返回一个页面,我想返回一个自定义的JSON Error对象.
当使用@ExceptionHandler抛出异常时,我可以这样做.所以如果它是一个空白的请求或一个空白的JSON对象(例如{}),它会抛出一个NullPointerException,我可以用我的ExceptionHandler抓住它,并做任何我喜欢的.
那么问题就是,当它只是无效的语法时,Spring并不会抛出异常,至少我看不到.它只是从服务器返回默认错误页面,无论是Tomcat,Glassfish等
所以我的问题是我如何“拦截”Spring并导致它使用我的异常处理程序或以其他方式阻止错误页面显示,而不是返回一个JSON错误对象?
这是我的代码:
@RequestMapping(value = "/trackingNumbers",method = RequestMethod.POST,consumes = "application/json")
@ResponseBody
public ResponseEntity setTrackingNumber(@RequestBody TrackingNumber trackingNumber) {
HttpStatus status = null;
ResponseStatus responseStatus = null;
String result = null;
ObjectMapper mapper = new ObjectMapper();
trackingNumbeRSService.setTrackingNumber(trackingNumber);
status = HttpStatus.CREATED;
result = trackingNumber.getCompany();
ResponseEntity response = new ResponseEntity(result,status);
return response;
}
@ExceptionHandler({NullPointerException.class,EOFException.class})
@ResponseBody
public ResponseEntity resolveException()
{
HttpStatus status = null;
ResponseStatus responseStatus = null;
String result = null;
ObjectMapper mapper = new ObjectMapper();
responseStatus = new ResponseStatus("400","That is not a valid form for a TrackingNumber object " +
"({\"company\":\"EXAMPLE\",\"pro_bill_id\":\"EXAMPLE123\",\"tracking_num\":\"EXAMPLE123\"})");
status = HttpStatus.BAD_REQUEST;
try {
result = mapper.writeValueAsString(responseStatus);
} catch (IOException e1) {
e1.printStackTrace();
}
ResponseEntity response = new ResponseEntity(result,status);
return response;
}