我想知道如何正确实现应该用作 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;
}
}
我意识到代码不是“恰到好处”,但我不知道如何使它成为它需要的方式。也许一些经验的回应会有所帮助?感谢您的支持