2013-03-05 2890 views
1

當接收到作爲@ResponseBody參數的詳細信息時,Spring將創建一個新的Object類型對象(例如public void createUser(@RequestBody User user)。我將數據作爲JSON發送到服務器,Spring創建新的用戶對象如指定Spring @RequestBody和默認值

我的問題是,有沒有辦法讓Spring忽略自動生成的字段(比如createDate等)。所以,如果我例如通過{"username":"sam"}而沒有別的, D類似於其他領域(即使是無效的)的用戶對象只填充了用戶名字段,並沒有。

的原因,我問這個是因爲我的用戶繼承某些默認autoge來自另一個我無法觸及的對象的特性屬性,我需要有一個對象除了來自請求的字段外,其它所有字段都爲null。 更新:然後我可以在JpaRepository(忽略空值)的對象合併新創建的對象。

謝謝:-)

+0

您可能需要重寫這些字段的獲取方法並添加註釋'@ JsonIgnore' – 2013-03-05 00:39:16

+0

查看http://stackoverflow.com/questions/3921736/parsing-json-into-java-objects-in-spring- mvc – iMysak 2013-03-05 00:40:34

+0

聽起來像createDate等其他字段是在實例化時設置的?這是沒有辦法的。我可以考慮的唯一方法是將所有值設置爲Null在User對象的默認構造函數中。 – ninnemannk 2013-03-05 20:58:45

回答

0

它確實有這樣做的方式。例如:@initBinder or convertService,但它會更復雜,我也不知道確切的實現來執行該代碼。而最簡單的方法是創建一個新的類,可稱爲:TmpUser,只是有1場:用戶名,你使用這個類來接受請求的數據,並將數據複製到用戶,那麼它都能滿足你的要求。您可以使用Spring utils. BeanUtils.copyProperties()進行復制。

+0

謝謝Lakshmi。進入的數據可能有多個字段或多個字段中的一個,而不僅僅是用戶名。我不想複製null值。 另外,有關如何使用BeanUtils對對象進行深層複製的任何想法? – SamEsla 2013-03-06 22:35:28

+0

如果使用BeanUtils.copyProperties(User,TmpUser);它會在TmpUser複製領域衣被合計到用戶,而且由於用戶某些領域不包括在TmpUser,所以副本字段值的那些部分將被保存爲默認,這將是無效後。 – OQJF 2013-03-07 00:37:59

0

如果返回一個User對象,所有領域都包括全自動默認情況下,不要去碰改變它。但是你可以返回一個帶填充名稱的HashMap。

@ResponseBody public Map createUser(@RequestBody User user) { 
    ... 
    Map userCreated = new HashMap(); 
    userCreated.put("username", user.getUsername()); 
    return userCreated; 
} 

以其他方式,您可以定義並創建一個新的UserForm對象,以執行您期望返回的操作,如下所示。

public class UserForm{ 

    private String username; 

    public UserForm(User user){ 
     this.username = user.getUsername(); 
    } 

    public void setUsername(String username){ 
     this.username = username; 
    } 

    public String getUsername(){ 
     return this.username;  
    } 
} 

@ResponseBody public UserForm createUser(@RequestBody User user) { 
    ... 

    return new UserForm(user); 
} 

希望它會有所幫助。

+0

謝謝亨利。如果我像第一個示例中所建議的那樣實現一個Map,那麼將地圖中的值放入數據庫中現有的User對象的最佳方法是什麼?只更新進入的字段? – SamEsla 2013-03-06 22:37:36