2016-05-30 7 views
1

RESTful APIを作成するには、Spring Data Restを使用しています。 Spring Data Restリポジトリ(HATEOASリンク付き)によって生成されたもののようなエンティティ表現を返す例外を処理したい。私は、エンティティ表現を返すために必要な場所からの方法は以下の通りです:SpringデータRest Entityレスポンス形式を手動で作成する方法

@ExceptionHandler(value = {ExistentUGVException.class}) 
@ResponseBody 
protected ResponseEntity<UGV> existentUGVHandler(HttpServletRequest request, HttpServletResponse response, ExistentUGVException ex) { 
    return new ResponseEntity<UGV>(ex.ugv, HttpStatus.OK); 
} 

この実装では、リンクのないUGV表現を返します。

{ 
    "title" : "Golden Eagle Snatches Kid", 
    "publishDate" : "2012-12-19T13:55:28Z", 
    "url" : "https://www.youtube.com/watch?v=Xb0P5t5NQWM" 
} 

をしかし、それは次のようになります。

{ 
    "title" : "Golden Eagle Snatches Kid", 
    "publishDate" : "2012-12-19T13:55:28Z", 
    "url" : "https://www.youtube.com/watch?v=Xb0P5t5NQWM", 
    "_links" : { 
     "self" : { 
      "href" : "http://localhost/youTubeVideos/Xb0P5t5NQWM" 
     }, 
     "youTubeVideo" : { 
      "href" : "http://localhost/youTubeVideos/Xb0P5t5NQWM{?projection}", 
      "templated" : true 
     }, 
     "user" : { 
      "href" : "http://localhost/youTubeVideos/Xb0P5t5NQWM/user" 
     } 
    } 
} 

答えて

1

ResponseEntityをResourceに変換してからリンクを手動で追加する必要があります。理論的にはメタ//([それが望ましいだろう]、質問に答えることがあり、この一方でspring hateoas documentation

+0

@ExceptionHandler(value = {ExistentUGVException.class}) @ResponseBody protected ResponseEntity<Resource<UGV>> existentUGVHandler(HttpServletRequest request, HttpServletResponse response, ExistentUGVException ex) { final Resource<UGV> resource = getResource(ex.ugv); return new ResponseEntity<Resource<UGV>>(resource, HttpStatus.OK); } public Resource<T> getResource(T object, Link... links) throws Exception { Object getIdMethod = object.getClass().getMethod("getId").invoke(object); Resource<T> resource = new Resource<T>(object); // The main resource final Link selfLink = entityLinks.linkToSingleResource(object.getClass(), getIdMethod).withSelfRel(); String mappingRel = CLASSMAPPING.getMapping(this.getClass()); final Link resourceLink = linkTo(this.getClass()).withRel(mappingRel); resource.add(selfLink, resourceLink); resource.add(links); return resource; } 

あなたが必要なすべてがあります、こちらをご覧ください:

それはこのようなものでなければなりません.stackoverflow.com/q/8259)ここに回答の重要な部分を含め、参照のためのリンクを提供してください。 – Raju

+0

私はサンプルコード –

+0

を提供するために私の答えを変更しましたあなたの記事を編集していただきありがとうございます。 – Raju

関連する問題