4

当接收到作为 @ResponseBody 参数的详细信息时,Spring 创建一个正确类型的新对象(例如public void createUser(@RequestBody User user)。我将数据作为 JSON 发送到服务器,Spring 按照指定创建新的用户对象。

我的问题是,无论如何让 Spring 忽略我拥有的自动生成的字段(如 createDate 等)。因此,例如,如果我只传入{"username":"sam"}而不是其他任何内容,我想要一个用户对象,它只填充了用户名字段,而没有其他字段(即使那是无效的)。

我问这个的原因是因为我的用户从另一个我无法触及的对象继承了一些默认的自动生成属性,并且我需要一个对象,除了来自请求的字段之外,所有字段都为空。更新:然后我可以将新创建​​的对象与 JpaRepository 中的对象合并(忽略空值)。

谢谢 :-)

4

2 回答 2

0

如果返回 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 );
} 

希望它会有所帮助。

于 2013-03-05T01:02:53.010 回答
0

它确实有办法做到这一点。例如:@initBinder or convertService,但它会更复杂,而且我也不知道执行该代码的确切实现。虽然最简单的方法是创建一个新类,可以称为:TmpUser并且只有1个字段:userName,您使用该类来接受请求数据,并将数据复制到用户,然后它就可以满足您的要求。你可以Spring utils. BeanUtils.copyProperties()用来做副本。

于 2013-03-05T01:38:42.663 回答