Джексон Json Parser - Как обрабатывать исключения для значения не найдено - PullRequest
0 голосов
/ 11 марта 2020

Краткая справка: я создал простой Spring REST API, основанный на простом файле JSON. Я использовал Джексона для разбора JSON. Сам API работает нормально. Например, когда я ввожу необходимый идентификатор, он возвращает нужные поля. У меня проблемы с обработкой исключений. Поэтому, если я, например, ввожу фильмы / 7 (нет mov ie с идентификатором 7), он просто возвращает пустое тело. Какой код мне нужен, чтобы вместо этого выдать исключение? Пожалуйста, найдите код ниже:

MovieService. java

1. @Component
2. public class MovieService {
3. 
4.     ObjectMapper objectMapper = new ObjectMapper();
5. 
6.     public Movie findAll() throws IOException {
7. 
8.         byte[] jsonData = Files.readAllBytes(Paths.get("movies.json"));
9. 
10.             Movie movie = objectMapper.readValue(jsonData, Movie.class);
11.             return movie;
12. 
13.     }
14. 
15.     public Movies findMovie(int id) throws IOException {
16. 
17.         byte[] jsonData = Files.readAllBytes(Paths.get("movies.json"));
18.         Movie movie = objectMapper.readValue(jsonData, Movie.class);
19. 
20.             for (Movies movies : movie.getMovies()) {
21.                 if (movies.getMovieId() == id) {
22. 
23.                     return movies;
24.                 }
25.             }
26. 
27.             return null;
28.     }
29. }    

MovieController. java

1. @RestController
2.     public class MovieController {
3.     
4.         @Autowired
5.         private MovieService movieService;
6.     
7.         @GetMapping
8.         @RequestMapping("/movies")
9.         public Movies[] getAll() throws IOException {
10.     
11.                 Movies[] response = movieService.findAll().getMovies();
12.                 return response;
13.     
14.         }
15.     
16.         @GetMapping
17.         @RequestMapping("/movies/{id}")
18.         public Movies getMovie(@PathVariable int id) throws IOException {
19.     
20.             Movies response = movieService.findMovie(id);
21.             return response;
22.         }
23. }

Как я уже сказал, код работает абсолютно нормально. Но что, если оператор / try-catch мне нужно реализовать, чтобы получить исключения?

1 Ответ

0 голосов
/ 11 марта 2020

Используйте @ExceptionHandler для выброса исключения из уровня обслуживания.

@ExceptionHandler(NoDataException.class)
public ResponseEntity handleException(NoDataException e) {
    return new ResponseEntity("No Data Found", HttpStatus.OK);
}

Бросок NoDataException из любого места, где вы хотите обработать конкретное c исключение.

Подробнее здесь - https://spring.io/blog/2013/11/01/exception-handling-in-spring-mvc

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...