Мне было интересно, как правильно реализовать контроллер Spring, который должен служить службой REST. Особенно хочу попробовать сделать интерфейс 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;
}
}
Я понимаю, что код не "прав", но я не могу понять, как сделать его таким, каким он должен быть. Может быть, некоторые впечатления помогут? спасибо для поддержки уже