弹簧MVC Rest服务控制器与错误处理完成正确吗?
2022-09-01 18:25:53
我想知道如何正确实现应该用作REST服务的Spring控制器。特别是我想尝试使界面尽可能地RESTful。我也想利用HTTP错误代码,以便我的客户可以采取相应的行动。
我想知道如何实现我的方法,所以如果一切正常(在响应的正文中),他们会返回JSON,或者抛出一个http错误代码以及它不起作用的自定义原因(可能是来自DAO或数据库的错误)。但是,我不确定哪一个是正确的方法?返回一个字符串并添加值以返回到模型,还是返回一个HashMap并将我的东西放在那里?还是直接返回对象?但是,如果发生错误并且我无法返回所述类怎么办?是否返回空值?我发布了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;
}
}
我意识到代码不是“恰到好处的”,但我不知道如何让它成为它需要的样子。也许一些经验的回应会有所帮助?THX已经支持