Проблемы реализации простого сервиса REST - Spring MVC - PullRequest
0 голосов
/ 16 мая 2018

У меня есть приложение Springboot (приложение видеоклуба).Я не думаю, что нужно показывать вам весь код, поскольку он был бы очень многословным.Но он отлично работает.

Класс Film и FilmRepository с некоторыми методами, контроллером, базой данных JPA и файлами HTML.Все отлично работает Я не ищу решение для кода, а скорее для "концептуального" решения , просто чтобы знать, правильно ли я реализую службу REST.

Я хочу добавить сейчас действительно простоеСлужба REST (добавление класса «MyRestController»), которая будет искать фильм, просто добавив его название в URL.

Поэтому, помимо моего контроллера, я хочу добавить этот RestController просто для того, чтобы сделать это простымвещь: если я добавлю название фильма в URL, он будет искать его обычными методами MVC.

Но добавление того, что я считаю решением, дает мне эту ошибку:

Произошла непредвиденная ошибка (тип = Не найдено, статус = 404).Сообщение недоступно

Поэтому, просматривая содержимое HTML на странице для поиска фильма и добавляя к этому /buscar название фильма (которое у меня есть в БД) /buscar/Interstellar,он показывает ошибку before.

@CrossOrigin
@RestController
public class MyRestController {

    @Autowired
    private FilmRepository filmRepo;

    @RequestMapping(value = "/buscar", method = RequestMethod.GET)
    public ResponseEntity<List<Film>> getFilms(@RequestParam String Title) {
        List<Film> pelis = (List<Film>) filmRepo.findByTitle(Title);
        HttpStatus status = HttpStatus.OK;
        ResponseEntity<List<Film>> response = new ResponseEntity<>(pelis, status);
        return response;
    }
}

Получение этой ошибки заставляет меня думать, что страница знает, что она должна что-то сделать, но может иметь проблемы с ее получением (из-за строк, повторяемых вещей, списков или тому подобногопроблемы, JSON может быть).Но я не знаю, в порядке ли «теория» службы покоя в MyRestController.

Репозиторий фильмов:

public interface FilmRepository extends CrudRepository<Film, Long>{

    Iterable<Film> findByTitle(String Title);
}

(метод MVC в обычном контроллере)

@RequestMapping("/buscar")
    public ModelAndView processSearch(@RequestParam(value = "title", required = false) String title) {
        if (title == null || title == "") {
            Iterable<Film> films = filmRepo.findAll();
            return new ModelAndView("buscar").addObject("films", films);
        }
        Iterable<Film> films = filmRepo.findByTitle(title);
        return new ModelAndView("buscar").addObject("films", films);

    }

Ответы [ 2 ]

0 голосов
/ 17 мая 2018

В конце концов, проблема была в @RequestParam, который заставляет вас искать в URL с запросом, подобным: / buscar? Title = Interstellar

@RequestMapping(value = "/buscar/{title}", method = RequestMethod.GET)
    public ResponseEntity<List<Film>> getFilms(@PathVariable String title) {
    List<Film> pelis = (List<Film>) filmRepo.findByTitle(title);
    HttpStatus status = HttpStatus.OK;
    ResponseEntity<List<Film>> response = new ResponseEntity<>(pelis, status);
    return response;
}

С помощью этой службы REST вы можете искатьпо URL-адресу, например "/buscar/Interstellar".

В результате вы получите контент JSON со всей информацией об объектной пленке.

0 голосов
/ 16 мая 2018

То, о чем вы говорите, это @PathVariable

@RequestMapping(path={"/buscar","/buscar/{title}"})
public ModelAndView processSearch(@PathVariable(value = "title", required=false) String title) {
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...