2017-08-13 71 views
1

我正在使用spring數據休息。當我嘗試創建一個資源使用POST方法與應用/ JSON使用下面的對象,關聯資源不綁定,儘管它們已存在於數據庫爲什麼關聯資源沒有約束

{ 
screeName : 'adsaf', 
screenType : { 
    screenTypeId : 1, 
    screenTypeName : 'Fixed' 
} 
} 

爲什麼?除了單獨設置關聯以外,還有其他方式可以完成這項任務嗎?我問這個問題,因爲如果我手動在控制器中接收此表單並使用ObjectMapper反序列化並保存此對象,則將設置所有關聯。那麼,爲什麼它不是在休息

回答

1

春季數據REST works與資源鏈接春天數據發生,所以你有你的有效載荷改變這樣的事情:

POST http://localhost:8080/api/screens

{ 
    "screenName": "adsaf", 
    "screenType": "http://localhost:8080/api/screenTypes/1" 
} 

如果您需要保存ScreenType當您POST Screen對象時,您應該關閉您的ScreenType存儲庫的導出:

@RepositoryRestResource(exported = false) 
public interface ScreenTypeRepo extends JpaRepository<ScreenType, ...> { 
} 

,並添加級聯(至少PERSIST)到您的screenTypeScreen實體:

public class Screen { 
    //... 
    @ManyToOne(cascade = CascadeType.PERSIST) 
    ScreenType screenType; 
} 

這意味着ScreenTypeScreen管理。在這種情況下,你將能夠使用的有效載荷是這樣的:

POST http://localhost:8080/api/screens

{ 
    "screenName": "adsaf", 
    "screenType": { 
     "screenTypeName": "Fixed" 
    } 
} 

同時創建一個新的ScreenType與屏幕。