我有一个Springboot应用程序(一个视频俱乐部应用程序)。我不认为有必要向您展示所有代码,因为它会非常详细。但它运作正常。
类Film
和FilmRepository
,包含一些方法,控制器,数据库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);
}
答案 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内容。