java - 错误处理的 Spring MVC Rest 服务 Controller 正确吗?

标签 java spring rest spring-mvc

我想知道如何正确实现一个应该用作 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/

相关文章:

spring - Spring Boot 未使用 Jackson Kotlin 插件

java - 如何阻止 java.net.http.HttpClient 发出升级请求?

wcf - 以 RESTful 方式从 WCF 服务返回错误的最佳方法是什么?

objective-c - RestKit POST 非对称 key 错误

java - 从 @ManyToMany 列表中删除对象的正确方法

java - Eclipse - 错误 : Could not find or load main class

java - 如何签署一个永不过期的 jar ?

java - 如何使用 Apache POI 在 Java 中读取 Excel ListBox 值

STS 中缺少 Spring/Spring bean 配置文件选项

java - Spring MVC 与 OSGi - 如何注册新 Controller - 第二部分?