我正在使用jax-rs和spring mvc开发一个应用程序。 我想在每次发生默认错误时通知我的客户端 400,403,404,405和415。
@Controller
@RequestMapping("/customer")
public class CustomerController {
@Autowired
CustomerService customerService;
// ........xxxxxx..............xxxxxxx................xxxxxxx.............//
@CrossOrigin
@RequestMapping(value = "/",
method = RequestMethod.GET,
produces = MediaType.APPLICATION_JSON_VALUE)
public @ResponseBody String fetchCustomer() throws JsonProcessingException {
return new ObjectMapper().writeValueAsString(customerService.fetchAllCustomer());
}
// ........xxxxxx..............xxxxxxx................xxxxxxx.............//
}
$http({
method: "GET",
contentType: "application/json",
url: baseUrl + '/customer'
}).success(function (response) {
console.log(response);
// you can also use
console.log(JSON.stringify(response);
}).error(function (response) {
console.log(response);
});
当我从客户端请求服务时,我希望使用状态代码和自定义消息发回响应。
当我在控制器上定义method = post并从客户端发送请求时,我发送请求作为获取服务应返回
之类的消息error:{
Status Code: 405,
Message: Invalid Method
url: error/405
}
答案 0 :(得分:0)
检查this以供参考。
定义处理特定错误场景的方法,并将其注释为@ExceptionHandler
。您的方案中的例外(不支持请求方法)是HttpRequestMethodNotSupportedException.class
。您可以使用Throwable, Exception
等创建更通用的处理程序方法。
为了防止跨控制器重复错误处理,一种方便的方法是在单个类中定义所有处理程序并在其上使用@ControllerAdvice
。这样,所有处理程序都将应用于所有控制器。
答案 1 :(得分:0)
不要返回String但返回org.springframework.http.ResponseEntity。 您可以向此对象添加状态代码
ResponseEntity<String> responseEntity = new ResponseEntity<String>("This is a response", HttpStatus.INTERNAL_SERVER_ERROR);
return responseEntity;
所以你的方法签名也会改变如下
@RequestMapping(value = "/", method = RequestMethod.GET, produces = MediaType.APPLICATION_JSON_VALUE)
public @ResponseBody ResponseEntity<String> fetchCustomer() throws JsonProcessingException {
try {
String str = new ObjectMapper().writeValueAsString(customerService.fetchAllCustomer());
return new ResponseEntity<String>(str, HttpStatus.OK);
}
catch (Exception e) {
return new ResponseEntity<String>(e.getMessage(), HttpStatus.INTERNAL_SERVER_ERROR);
}
}
如果出现错误,您可以使用控制器建议或捕获异常并适当更新ResponseEntity