我需要为我的REST Web服务请求设置不同的HTTP状态代码。 基本上用户会发送ISBN号,我需要对其进行验证 1.如果用户发送空的请求正文,则给出错误消息ISBN不能为空 并设置http状态代码 2.如果用户提供了Alphabets,则给出了错误消息,Allowers不允许,并设置了适当的http状态代码 3.如果用户输入错误的格式,请给错误消息输入错误的格式,并设置不同的HTTP状态代码。 4.如果isbn无效,则给出错误消息“无效的ISBN号”,并设置适当的HTTP状态代码。 5.如果输入有效的ISBN号,则返回http状态为200的书名。
我尝试设置http状态代码,但未反映出来。
@RequestMapping(value = "/person", method = RequestMethod.POST,
consumes = "application/json", produces = "application/json")
public ResponseEntity<StatusBean> findBook(@RequestBody String json) {
StatusBean sb = new StatusBean();
if(json==null) {
sb.setMessage("Request Cannot be Null");
return new ResponseEntity<StatusBean>(sb,HttpStatus.BAD_REQUEST);
}
if(!isNumeric(json)) {
sb.setMessage("Request Cannot have Alphabets Characters");
//here i need to set different status
return new ResponseEntity<StatusBean>(sb,HttpStatus.BAD_REQUEST);
}
if(!isValidFormat(json)) {
sb.setMessage("Request Cannot have Alphabets Characters");
//here i need to set different status
return new ResponseEntity<StatusBean>(sb,HttpStatus.BAD_REQUEST);
}
if(!isValidISBN(json)) {
sb.setMessage("Request Cannot have Alphabets Characters");
//here i need to set different status
return new ResponseEntity<StatusBean>(sb,HttpStatus.BAD_REQUEST);
}
Map<String,String> map = new HashMap<>();
map.put("book", "Effective Java");
sb.setResponseJSONMap(map);
return new ResponseEntity<StatusBean>(sb,HttpStatus.OK);
}
公共类StatusBean {
private String message;
private Map<String,String> responseJSONMap;
public String getMessage() {
return message;
}
public void setMessage(String message) {
this.message = message;
}
public Map<String, String> getResponseJSONMap() {
return responseJSONMap;
}
public void setResponseJSONMap(Map<String, String> responseJSONMap) {
this.responseJSONMap = responseJSONMap;
}
}
答案 0 :(得分:0)
@RequestMapping(value = "/person", method = RequestMethod.POST,
consumes = "application/json", produces = "application/json")
public ResponseEntity<StatusBean> findBook(@RequestBody(required=false) String json) {
// rest of the code
}
尝试对请求正文使用(required = false)。 Spring默认情况下需要resuest正文。
答案 1 :(得分:0)
最优雅的解决方案之一是:
您可以在发生验证错误的情况下引发自定义异常,如下所示:
@RequestMapping(...)
public ResponseEntity<StatusBean> findBook(@RequestBody String json) throws Exception {
...
if(json==null) {
throw new NullRequestException();
}
if(!isNumeric(json)) {
throw new RequestContainsAlphabetsException();
}
if(!isValidFormat(json)) {
throw new InvalidFormatException();
}
...
}
然后您需要在应用程序级别定义一个自己的全局异常处理程序。在此自定义异常处理程序中,您将捕获引发的异常,并通过自定义错误消息,HTTP响应代码,时间戳等将正确的响应发送回客户端。
有关更多详细信息,请参见此page。