![](/img/trans.png)
[英]Spring Boot @RequestBody bind null values to a default value?
[英]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.