2016-04-25 15 views
1

私はMongoRepositoryをSpringブートデータレストに使用しています。しかし、私は新しく作成されたオブジェクトに "Register Date"を入れたいのですが、デフォルトの実装はそれをサポートしていません。私はすべての新しいオブジェクトに余分なフィールドを配置する独自のカスタムコントローラを実装する必要があります。問題は、私自身のコントローラーを実装するときにHATEOASが機能しなくなることです。SpringブートデータREST、HATEOASがカスタムコントローラと連携していません

リポジトリクラス:

@RepositoryRestResource(collectionResourceRel = "users", path = "users") 
public interface UserRepository extends MongoRepository<User, String> { 
} 

コントローラクラス:このカスタムコントローラと

@RestController 
@RequestMapping("/users") 
public class UserController { 

    @Autowired 
    UserRepository repository; 

    @RequestMapping(method = RequestMethod.GET) 
    public ResponseEntity<List<User>> getAll() { 
     List<User> list = repository.findAll(); 
     return new ResponseEntity<>(list, HttpStatus.OK); 
    } 

ペイロードは次のようになります。私のカスタムコントローラなし

[ 
    { 
     "id": "571de80ebdabf25dd6cdfb73", 
     "username": "mark", 
     "password": "mark123", 
     "email": "[email protected]", 
     "createdAt": "2016-04-25 11:49" 
    }, 
    { 
     ... 

ペイロードは次のようになります。

{ 
    "_embedded": { 
     "users": [ 
      { 
       "username": "mark", 
       "password": "mark123", 
       "email": "[email protected]", 
       "createdAt": "2016-04-25 11:49", 
       "_links": { 
        "self": { 
         "href": "http://localhost:8080/users/571de80ebdabf25dd6cdfb73" 
        }, 
        "user": { 
         "href": "http://localhost:8080/users/571de80ebdabf25dd6cdfb73" 
        } 
       } 
      }, 
      { 
      ..... 

@RestControllerの代わりに@RepositoryRestControllerを使用しようとしましたが、役に立たなかった。独自のカスタムコントローラを実装せずに、新しく作成されたオブジェクトに「登録日」を入れる別の方法があるのだろうか?もしそうでなければ、私は何をしてHATEOASを再び働かせることができますか?

+0

あなたは同じパスコントローラとリポジトリレストソース広告を与えます。あなたのカスタムコントローラでは特別なパスを追加するだけです。例getAll()mを置き換えますこの@RequestMapping(method = RequestMethod.GET、value = "/ getall")でエソードリクエストマッピングを行い、 –

+0

@kakashihatakeの提案に感謝していますが、動作していません。結果は以前と同じです。 – oxyt

+0

このパス/ people/getallでリクエストを試しましたか? –

答えて

0

私は私の問題私の視点:)

1与えたのコメントのおかげで解決 - ResourceSupportと拡張Userクラスを。 (注意:ResourceSupportはgetId()方法を必要とするためuserIdためだけidを使用しないでください。)

public class User extends ResourceSupport { 

    @Id 
    private String userId; 

2 - 続い

import static org.springframework.hateoas.mvc.ControllerLinkBuilder.linkTo; 

@RequestMapping(method = RequestMethod.GET) 
    public ResponseEntity<List<User>> getAll() { 
     List<User> list = repository.findAll(); 
     for(User user : list) { 
      Link self = linkTo(UserController.class).slash(user.getUserId()).withSelfRel(); 
      Link users = linkTo(UserController.class).slash(user.getId()).withRel("users"); 
      user.add(self); 
      user.add(users); 
     } 
     return new ResponseEntity<>(list, HttpStatus.OK); 
    } 

は今、私のペイロードは次のようになりとしての私のコントローラクラスを更新:

[ 
    { 
     "userId": "571e44ecbdab7b1ffc668f02", 
     "username": "newton", 
     "password": "gravity", 
     "email": "[email protected]", 
     "createdAt": "2016-04-25 18: 
     "links": [ 
      { 
       "rel": "self", 
       "href": "http://localhost:8080/users/571e44ecbdab7b1ffc668f02" 
      }, 
      { 
       "rel": "users", 
       "href": "http://localhost:8080/users" 
      } 
     ] 
    }, 
    { 
     .... 
+1

レポからのHATEOASの回答には依然として大きな違いがありますが、これに関する追加情報はありますか? – Rafael

関連する問題