实现简单REST服务的问题 - Spring MVC

时间:2018-05-16 18:10:36

标签: spring rest spring-mvc model-view-controller

我有一个Springboot应用程序(一个视频俱乐部应用程序)。我不认为有必要向您展示所有代码,因为它会非常详细。但它运作正常。

FilmFilmRepository,包含一些方法,控制器,数据库JPA和HTML文件。一切正常。 我不是在寻找代码解决方案,而是更多地寻找“概念性”解决方案,只是想知道我是否正在实施REST服务。

我想现在添加一个非常简单的REST服务(添加一个类“MyRestController”),只需在URL中添加它的名称即可搜索电影。

除了我的Controller之外,我想添加这个RestController只是为了做这件事:如果我在URL中添加一个电影的名称,它将使用正常的MVC方法搜索它。

但添加我认为的解决方案会给我这个错误:

  

出现意外错误(type = Not Found,status = 404)。   没有可用的消息

因此,当浏览HTML内容到页面搜索电影,并添加到/buscar电影名称(我在数据库中)/buscar/Interstellar时,它会显示之前的错误

@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 :(得分:0)

您所谈论的是@PathVariable

@RequestMapping(path={"/buscar","/buscar/{title}"})
public ModelAndView processSearch(@PathVariable(value = "title", required=false) String title) {

答案 1 :(得分:0)

最后,问题在于@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”。

结果将为您提供包含Object Film的所有信息的JSON内容。