2014-11-22 71 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; 

} 
相关问题