2014-11-22 74 views
3

我正在使用Spring Rest Data,並且已將應用程序配置爲使用RepositoryRestMvcConfiguration。我有以下2個實體:Spring Rest Data - 未在@RequestBody中轉換的外鍵對象URL

企業有很多的用戶關係。

@Entity 
@Table(name="enterprise") 
public class Enterprise extends BaseEntity 
{ 
    @Id 
    @GeneratedValue(strategy=GenerationType.IDENTITY) 
    @Column(name="enterprise_id") 
    private Long id; 

    @Column(name="enterprise_name") 
    private String name; 
} 

@Entity 
@Table(name="user") 
public class User extends BaseEntity 
{ 
    @Id 
    @Column(name="user_id") 
    @GeneratedValue(strategy=GenerationType.IDENTITY) 
    private Long id; 

    @ManyToOne(optional = false, fetch = FetchType.LAZY) 
    @JoinColumn(name = "owner_enterprise_id", referencedColumnName = "enterprise_id") 
    private Enterprise ownerEnterprise; 

    @Column(name="username") 
    private String userName; 

    @Column(name="emailaddress") 
    private String emailAddress; 

    @Column(name="passwordhash") 
    private String password; 
} 

我能夠發送POST請求創建企業,我想要做的下一件事就是創建一個具有FK給企業用戶。

這裏是我的UserController中:

@RequestMapping(value="/createUser", method=RequestMethod.POST) 
public ResponseEntity<User> register(@RequestBody User user) { 

    User newUser = userService.register(user); 
    return new ResponseEntity<User>(newUser, HttpStatus.OK); 
} 

當我嘗試發送後創建新用戶:

curl -i -X POST \ 
-H "Content-Type: application/json" \ 
-d '{"userName":"johndoe", "emailAddress":"[email protected]", "password":"johnpass1", "ownerEnterprise":"http://localhost:8080/enterprises/1" 
}' \ 
http://localhost:8080/createUser 

我把斷點在我的控制器,看到用戶對象的ownerEnterprise場爲空(但其他字段包含正確的數據)。 有人能幫我看看我失蹤了嗎?我試圖搜索這個小時,沒有運氣。

我也覈實網址是否正確:

curl http://localhost:8080/enterprises/1 

    { 
     "name" : "MyEnterprise", 
     "_links" : { 
     "self" : { 
      "href" : "http://localhost:8080/enterprises/1" 
     } 
     } 
    } 

多謝您的時間!

回答

2

你的界面是不是一個Spring的數據基於REST的一個,它是一個直Spring MVC的要求,所以下面樣的POST應爲你工作:

{"userName":"johndoe", "emailAddress":"[email protected]", "password":"johnpass1", "ownerEnterprise":{"id":1, "name":"Test Enterprise"}} 

本質上講,這是一個JSON表示您的User實體。

假如你暴露你的用戶實體爲@RepositoryRestResource那麼你的原始請求應該工作

+0

但按照本指南:http://spring.io/guides/gs/accessing-data-rest/ .. @RepositoryRestResource不需要要導出的倉庫。它僅用於更改導出詳細信息,例如使用/ people而不是/ persons的默認值。 – user1955934 2014-11-22 22:02:27

+0

我試圖將@RepositoryRestResource添加到我的UserRepository類,但仍然是同一問題..:x – user1955934 2014-11-23 01:15:26

+0

您是否還刪除了此特定控制器?@RepositoryRestResource公開了它自己的一組端點 – 2014-11-23 03:32:43

1

我遇到了同樣的問題。在你的企業類中添加一個構造函數應該可以解決它。

public Enterprise(Long id) { 
    super(); 
    this.id = id; 

} 
相關問題