我要处理以下控制器方法的错误
@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
答案 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
就是这样。希望这会有所帮助。