[英]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.