我想知道如何正确实现一个应该用作 REST 服务的 Spring Controller。特别是我想尝试使界面尽可能地 RESTful。我还想使用 HTTP 错误代码,以便我的客户可以采取相应的行动。
我想知道如何实现我的方法,所以如果一切正常(在响应的正文中)它们会返回 JSON,或者抛出一个 http 错误代码以及它不起作用的自定义原因(可能来自的错误DAO 或数据库)。但是我不确定哪一个是正确的方法?返回一个字符串并添加值以返回一个模型,或者返回一个 HashMap 并将我的东西放在那里?还是直接返回对象?但是如果发生错误并且我无法返回所述类怎么办?而是返回null? 我发布了我可以想象的 2-3 种方法:
@RequestMapping(value="/addUser", method= RequestMethod.POST)
public String addUser(@RequestBody User user, HttpServletResponse response, Model model) throws Exception{
try{
userService.addUser(user);
model.addAttribute("user", userService.getUser(user.getUsername(), user.getPassword()));
return "user";
}catch(Exception e){
model.addAttribute("error", e.toString());
response.sendError(HttpServletResponse.SC_INTERNAL_SERVER_ERROR, e.toString());
return "error";
}
}
或者更确切地说是这样:
@RequestMapping(value="/addUser", method= RequestMethod.POST)
public @ResponseBody Map addUser(@RequestBody User user, HttpServletResponse response){
Map map = new HashMap();
try{
userService.addUser(user);
map.put("success", true);
map.put("username", user.getUsername());
}catch (KeyAlreadyExistsException e){
map.put("success", false);
map.put("Error", e.toString());
response.sendError(HttpServletResponse.SC_FORBIDDEN, e.toString());
}catch(Exception e){
map.put("success", false);
map.put("Error", e.toString());
response.sendError(HttpServletResponse.SC_INTERNAL_SERVER_ERROR, e.toString());
}
finally {
return map;
}
}
我意识到代码不是“恰到好处”,但我不知道如何使它成为它需要的方式。也许一些经验的回应会有所帮助?感谢您的支持
最佳答案
您还可以在您的 Rest Controller 中使用 @ExceptionHandler
注释方法捕获您的异常。
@ExceptionHandler(Exception.class)
@ResponseBody
@ResponseStatus(value = HttpStatus.BAD_REQUEST)
public String handleException(Exception e) {
return "return error object instead";
}
这将使您的实际 Controller /业务逻辑更清晰。
关于java - 错误处理的 Spring MVC Rest 服务 Controller 正确吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16295184/