自定义 RepositoryRestController 映射 url 在 spring-data-rest 中抛出 404

2024-02-01

我写了一个自定义RepositoryRestController使用其相应的实体存储库。对此 url 执行请求时,查询正在我的控制台中运行,但 url 返回 404。我还可以在日志中看到此 url 的 requestHandlerMapping。请参考我的以下代码片段。

存储库:

   @RepositoryRestResource
    public interface FooRepository extends BaseRepository<Foo, Integer> {
    @RestResource(exported = false)
    List<Foo> findByName(String name);
    }

控制器:

@RepositoryRestController
public class FooResource {
@Aurowired
FooRepository fooRepository;

@Autowired
RestApiService restApiService;

@RequestMapping(value = "/foos/search/byApiName", method = GET)
public ResponseEntity<?> findByApiName(String name) {
List<String> apiNames = restApiService.getNameLike(name);
List<Foo> fooList = fooRepository.findByName(name);

List<String> fooNames = // list of names from fooList
...
System.out.println("FETCHING apiNames");
return apiNames;
}

当我执行以下curl命令时

curl -X GET http:localhost:8080/foos/search/byApiName

响应返回 404 错误。我不知道为什么。但他的打印输出语句正在控制台中打印。

@hat我在这里做错了吗?


我建议您需要添加@ResponseBody到您的方法或返回值(如 SDR 示例中http://docs.spring.io/spring-data/rest/docs/current/reference/html/#customizing-sdr.overriding-sdr-response-handlers http://docs.spring.io/spring-data/rest/docs/current/reference/html/#customizing-sdr.overriding-sdr-response-handlers)或将您的列表包装在 ResponseEntity 中。

不确定这些方法之间是否存在任何差异,但都应该如此,如 Spring MVC 文档中所述:

“表明返回类型应该直接写入HTTP 响应主体(并且没有放置在模型中,或[被]解释为一种观点 姓名)."

http://docs.spring.io/spring/docs/current/spring-framework-reference/html/mvc.html#mvc-ann-responsebody http://docs.spring.io/spring/docs/current/spring-framework-reference/html/mvc.html#mvc-ann-responsebody

考虑到您打印了调试语句,但您得到了 404,看来后一个操作就是发生的情况。

@RequestMapping(value = "/foos/search/byApiName", method = GET)
@ResponseBody
public ResponseEntity<?> findByApiName(String name) {
    // ....
}

or,

@RequestMapping(value = "/foos/search/byApiName", method = GET)
public @ResponseBody ResponseEntity<?> findByApiName(String name) {
   //....
}

or,

@RequestMapping(value = "/foos/search/byApiName", method = GET)
public ResponseEntity<List<String>> findByApiName(String name) {
   //....

  return new ResponseEntity<List<String>>(fooNames, HttpStatus.OK);
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

自定义 RepositoryRestController 映射 url 在 spring-data-rest 中抛出 404 的相关文章

随机推荐