1

我有一个用于帐户的 REST 服务。控制器调用服务层来查找帐户。AccountService 可以抛出域异常。这通常是与客户端输入错误有关的情况。在这种情况下,我想用ClientException包装域异常。有没有办法可以向客户端显示状态代码 400 和异常消息?或者有没有更好的处理服务层检测到非法参数的情况?

@Controller
class AccountController
    @ResponseBody
    @RequestMapping("/accounts/${accountId}")
    public Account account(@PathVariable int accountId, HttpServletResponse response){
        try{
            return accountService.find("Account not found with id: " + accountId);
        }catch(Exception e){
            response.setStatus(400);
            throw new ClientException(e);
        }   
    }
}

class AccountService{
    public Account find(int accountId){
        if(acountId > 100){
            throw new AccountNotFoundException(accountId);
        }else{
            return new Account(accountId, "someone");
        }
    }
}   
4

2 回答 2

0

如果这是一个 REST 服务,那么只需设置响应状态和 JSON 正文(带有错误消息)就足够了。没有必要抛出那个 ClientException。

于 2013-01-26T07:21:02.553 回答
0

您可以创建一个异常处理程序,该处理程序接受异常并将其编组到 JSON 响应对象中。

我前段时间做过,效果很好,但是我知道不再有源代码可以分享。.

以 Spring MVC 的异常处理程序为起点。

于 2013-01-26T09:41:18.247 回答