簡體   English   中英

Spring @RequestBody和默認值

[英]Spring @RequestBody and default values

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

我的問題是,無論如何讓Spring忽略我自己生成的字段(比如createDate等)。 所以,如果我,例如,傳入{"username":"sam"}而沒有別的,我想要一個只填充用戶名字段的用戶對象,而不是其他任何字段(即使它是無效的) )。

我問這個的原因是因為我的User從另一個我無法觸及的對象繼承了一些默認的自動生成屬性,我需要一個包含所有字段為null的對象,除了來自請求的字段。 更新:然后我可以將新創建​​的對象與JpaRepository中的對象合並(忽略空值)。

謝謝 :-)

如果返回User對象,默認情況下會自動包含所有字段,您無法更改它。 但是你可以返回一個填充了uername的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 );
} 

希望它會有所幫助。

它確實有辦法做到這一點。 例如: @initBinder or convertService ,但它會更復雜,我也不知道執行該代碼的確切實現。 雖然最簡單的方法是創建一個新類,但可以調用: TmpUser並且只有1個字段:userName,您使用此類接受請求數據,並將數據復制到User,然后它就可以滿足您的要求。 您可以使用Spring utils. BeanUtils.copyProperties() Spring utils. BeanUtils.copyProperties()來做副本。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM