将Spring REST Web服务中的异常作为JSON / XML抛出

时间:2015-05-15 04:15:14

标签: java spring web-services rest exception-handling

我有一个REST Web服务控制器,如下所示:

@RequestMapping(value = URIConstants.URL_DOCUMENT_SEARCH, method = RequestMethod.POST, produces = { MediaType.APPLICATION_XML_VALUE, MediaType.APPLICATION_JSON_VALUE })
protected DocumentSearchResponse getDocuments(@Valid @ModelAttribute   DocumentSearchRequest objDMSRequest,BindingResult bindingResult, HttpServletRequest objServletRequest) throws AppException
{
    if (bindingResult.hasErrors()) 
    {
       //I want to throw my custom exception here 
 ///Or can anyone suggest a more clean and efficient way

    }
-----More code and logic
}

我有一个自定义异常和处理程序会抛出无效的HTTP无效请求异常。自定义异常具有错误代码和错误描述字段。 我的要求是有一种方法可以将错误从绑定结果解析为自定义异常并将其转换为控制器。

3 个答案:

答案 0 :(得分:2)

你能做什么:

return new ResponseEntity<String>(errorDescription,HttpStatus.BAD_REQUEST);

或者,如果你真的想使用Exception(不推荐),你可以做硬核:

try {
   throw new CustomException();
} catch(CustomException e) {
  e.printStackTrace();
  return new ResponseEntity<String>(e.getErrorDescription(),e.getStatusCode());
}

顺便说一下:回复一个例外情况并不好,这就是我不能表现出来的原因。

答案 1 :(得分:0)

就这么简单 1.创建一个扩展Exception的类。

<div id="mainWrapper" class="main-grid clearfix flexbox">
    <div id="sidebar" class="opened left flexbox-col">
        <ul>
            <li>sidebar</li>
            <li>sidebar</li>
            <li>sidebar</li>
            <li>sidebar</li>
            <li>sidebar</li>
       </ul>
    </div>
    <div id="page-content" class="page-content flexbox-col">
        <ul>
            <li>content</li>
            <li>content</li>
            <li>content</li>
            <li>content</li>
            <li>content</li>
            <li>content</li>
            <li>content</li>
            <li>content</li>
            <li>content</li>
        </ul>
    </div>
</div>

#sidebar {
    background-color: pink;
}
#page-content {
    background-color: green;
}
.flexbox {
    display: flex;
}
.flexbox .flexbox-col {
    display: flex;
    flex-direction: column;
    flex: 1;
}
#sidebar ul {
    background-color: red;
    display: flex;
    flex-direction: column;
    flex-grow: 1;
}
#sidebar ul li {
    flex-grow: 1;
}
#page-content ul {
    background-color: yellow;
}

2。使您的代码抛出相同类型的异常

 class MyCustomException extends Exception{
     MyCustomException(){
     }
     MyCustomException(Object e){
         super(e)
     }
 }

3。你已经完成的男人...... :)

答案 2 :(得分:0)

@ Albert-Pinto首先,你试图做到这一点是完全错误的。如果你想要使用一个对象,它应该是@RequestBody,而不仅仅是一个简单的对象。您在示例中所做的是我们使用Web应用程序的MVC方式,而不是我们为Web服务所做的方式。所以上面的代码将变为

@Controller 
@RequestMapping("/user")
 public class UserController {
   @RequestMapping(method=RequestMethod.POST)
   public ResponseEntity create(@RequestBody User user) {
   try {
       throw new CustomException();
    } catch(CustomException e) {
       e.printStackTrace();
       return new ResponseEntity<String>(e.getErrorDescription(),e.getStatusCode());
    }
}