11

検索リソースへのリンクを生成しようとしています。そこで、検索へのリンクを提供するリソースを作成したいと思います。

POST /resourcesearch
{param1: "value1",param2:"value2"}

応答は次のようになります。

{"links":[
  {
    "rel":"self",
    "href":"http://localhost:8080/resourcesearch"
  },
  {
    "rel":"resources",
    "href":"http://localhost:8080/resources?param1=value1&param2=value2"
  }
}

これが私のコードです:

@Controller
@RequestMapping("/resourcesearch")
public class ResourceSearchController{
  @RequestMapping(method = RequestMethod.POST) 
  public ResponseEntity<ResourceSupport> createResourceSearch(@RequestBody ResourceDTO dto){
    ResourceSupport resource = new ResourceSupport();
    //... do something here to build query string based on "dto"
    resource.add(linkTo(ResourceController.class).withRel("resources"));
    return new ResponseEntity<ResourceSupport>(resource, HttpStatus.CREATED);
  }
}
===========================================
@Controller
@RequestMapping("/resources")
public class ResourceController{
  @RequestMapping(method = RequestMethod.GET)
  public ResponseEntity<CollectionDTO> listResources(@RequestParam("param1") String param1, @RequestParam("param2") String param2){
    ...
  }
}

問題は、次の行の URL にクエリ文字列パラメーターを追加する方法がわからないことです。

resource.add(linkTo(ResourceController.class).withRel("resources"));

その行の結果は次のとおりです。

{
  "links" : [
    {
      "rel":"resources",
      "href":"http://localhost:8080/resources"
    }
  ]
}

何か案は?

4

1 に答える 1

5

リソースで使用した名前と目的の出力の間にいくつかの (潜在的な) 不一致があるため、うまくマッピングできません。

methodOnとにかく、 ofを使用する必要がありますControllerLinkBuilderこれは、あなたを動かす良い例です。

より複雑な例については、Spring HATEOAS の単体テストが良い例のソースです

于 2014-03-24T19:29:33.243 に答える