Spring Boot处理异常-无法写入HTTP消息

时间:2018-08-17 00:35:03

标签: java spring spring-boot spring-data

我要处理以下控制器方法的错误

@GetMapping(value= "search", params = {"id", "!name"})
    public ResponseEntity<?> getMovieById(@RequestParam(name = "id") short id) {
        Movie movie = this.movieService.getMovieById(id);
        if(null == movie) {
            throw new MovieNotFoundException("Unable to find moviee with id: " + id);
        }
        return ResponseEntity.ok(movie);
    }

因此,如果在链接nit中找到了ID,我就抛出了MovieNotFoundException
但是春天抛出了以下错误:

Failed to write HTTP message: org.springframework.http.converter.HttpMessageNotWritableException: Could not write JSON: Unable to find com.movies.mmdbapi.model.Movie with id 6; nested exception is com.fasterxml.jackson.databind.JsonMappingException: Unable to find com.movies.mmdbapi.model.Movie with id 6

2 个答案:

答案 0 :(得分:4)

您的电影对象通过 ResponseEntity 对象作为响应发送。并且响应作为 JSON 对象通过 HTTP

因此,您的电影对象需要对其本身进行 JSON字符串化 Java Reflection API 会自动为您完成这项工作。它会自动在您的电影类中调用 getters ,并创建 JSON 对象。

但是,某些 getters 可能不返回相关变量的确切字符串表示形式

例如:-

public String getUserId() {
    return userId.toHexString();
}

在这种情况下,可能会发生 HttpMessageNotWritableException

因此,您可以在相应字段上方使用 @JsonIgnore 批注将其忽略。或通过 getters 返回精确的字符串表示形式。

例如:-

@JsonIgnore
private ObjectId userId; 

答案 1 :(得分:0)

使用开箱即用的<header> <div class="container"> <div class="main"> <h1>Logo</h1> <a>Login</a> </div> <div class="nav"> <a href="">Link 1</a> <a href="">Link 2</a> <a href="">Link 3</a> <a href="">Link 4</a> </div> </div> </header>弹簧。您无需在Controller类中处理异常。只要在运行时异常发生的地方抛出异常(例如服务组件或DAO)。

然后编写这样的错误建议:

ControllerAdvice

就是这样。希望这会有所帮助。