当前位置: 首页 > 知识库问答 >
问题:

Spring Hateoas忽略查询参数

薛扬
2023-03-14

Spring Hateoas没有为以下请求映射创建适当的链接:

@GetMapping("/member/{id}")
public MemberResource getMemberById(@RequestParam String id){
     Member member = MemberService.getMemberById(id);
     return new MemberResource(member);
}


public class MemberResource extends ResourceSupport{

     public MemberResource(Member member){
  add(linkTo(methodOn(MemberController.class).getMember(member.getId)).withSelfRel());
        add(linkTo(methodOn(TeamsController.class).getTeams(memberId)).withRel("teams"));
        }}


        @GetMapping("/teams")
        public List<TeamResource> getTeamsById(@RequestParam String id)          {
            List<Team> teams = teamService.getTeamsById(id);
            return teams.stream().map(TeamResource::new).collect(Collectors.toList());
        }

致电/会员/12345时,您希望返回:

{
     member: {
       //omitted for brevity
     },
    _links:[
       {
         href: .../members/12345
       },
       {
         href: ../teams?memberId = 12345
       }

      ]
}

但相反,它返回:

{
     member: {
       //omitted for brevity
     },
    _links:[
       {
         href: .../members/12345
       },
       {
         href: ../teams/12345
       }

      ]
}

这是为什么?即使我使用@Request estParam,它也完全忽略了过滤器。在这件事上,任何建议都将受到赞赏。

共有1个答案

贺英悟
2023-03-14

免责声明:从未使用过Spring HATEOAS。

但乍一看,您似乎混淆了两种URL参数类型:

  • @PathVariable用于路径变量,例如.../team/TEAM_ID
  • @Request estParam用于查询参数,例如.../team? id=TEAM_ID
 类似资料:
  • 问题内容: 什么是运行查询以便忽略字段中的空格的最佳方法?例如,以下查询: 将找到以下条目: 我正在使用php或python,但我认为这没有关系。 问题答案:

  • 这个问题已经问过了:Spring data-ignore参数,如果它有一个空值和一个创建的票证,datajpa-209。 只要这个问题是近3年前的问题,而且票证可以追溯到2012年,我就想问是否有一种更舒适和通用的方法来避免处理和复制存储库方法的开销。2个这样的参数的解决方案看起来是可以接受的,但是我想实现4-5个参数的非常相同的过滤。

  • 编辑以获得更多澄清:查询字符串是从另一个(get)请求中遗留下来的。因此,如果我可以清除查询字符串,这也将工作。此外,我不希望编辑表单输入的,因为我希望此postendpoint可以用于其他服务,而不必更改它们。

  • 问题内容: 我正在寻找一种创建忽略空格的学说查询的方法。我尝试用replace,但是我一直都收到 预期的已知功能,得到“替换” 我的查询看起来像: 问题答案: 好的,我编写了一个替换DQL函数。 接下来在app / config.yml中,我添加: 最后,我在控制器中创建了一个DQL查询: 最有趣的是,“引号”非常重要。这意味着您可以在select,from,setParameter和orderB

  • 问题内容: 我有一个准备好的mysqli查询,如下所示: WHERE子句中有许多条件可以过滤结果。问题在于,这些参数以搜索形式提供,并且不是必需的。例如,某人可以同时使用名称,或仅使用大小和名称,或使用大小,名称和inStock进行搜索。 我需要某种方式来调整查询,以便仅提供所需的参数。我能想到的唯一解决方案是制作一个巨大的if..else结构,其中存在具有所有搜索选项组合的预先准备好的查询,但是

  • 问题内容: 我有一个由不同线程同时读取的表。 每个线程必须选择100行,在每行上执行一些任务(与数据库无关),然后它们必须从表中删除选定的行。 使用此查询选择行: 我的问题是:如何忽略(或跳过)以前使用MySQL中的select语句锁定的行? 问题答案: 我通常创建一个默认为NULL的process_id列,然后让每个线程使用唯一的标识符来执行以下操作: 这样可以确保每个线程从表中选择唯一的行集。