当前位置: 首页 > 知识库问答 >
问题:

在所有对象的参数上运行java

郎琪
2023-03-14

用户(id、名字、名字);

@RequestMapping(value = "/users/update", method = RequestMethod.POST)
    public User updateUser(@ModelAttribute("User") User user) {
        //persist.save(user);
        return user;
    }

post请求中,用户可以发送值为null的参数,我想确定这些参数是谁。

@modelattribute将这些值强制转换为user模型,并将null值赋予未与用户一起发送的空参数。

{
    "id": 1,
    "firstName": "itzik",
    "lastName": null, 
}

我正在尝试确定哪些参数保存值null以防止它们在保存之前损坏我的整个数据记录。

谢谢!

public class User {

    private int id;
    private String uid;
    private String firstName;
    private String lastName;
    private String email;
    private String phone;
    private int permission;
    private int department;
    private boolean deleted;

    public User(String uid, String firstName, String lastName, String email, String phone, int permission, int department, boolean deleted) {
        this.uid = uid;
        this.firstName = firstName;
        this.lastName = lastName;
        this.email = email;
        this.phone = phone;
        this.permission = permission;
        this.department = department;
        this.deleted = deleted;
    }
}

共有1个答案

袁秦迟
2023-03-14

当您使用Spring框架时,有一个序列化/反序列化发生在“幕后”,这涉及到您的POJO。

@RequestMapping(value = "/users/update", method = RequestMethod.POST)
public User updateUser(@ModelAttribute("User") User user) {
    //persist.save(user);
    return user;
}

...HTTP协议将带来表示用户的文本/JSON内容,但不会发送用户的实例。同样,当您的在方法中返回user;时,您返回的是user的实例,但是客户机得到的是一个表示您的用户的序列化Json(这是因为Spring会在幕后为您序列化类)。

因此,Spring将寻找user的构造函数,并将Json字符串反序列化为user实例。

public User(String lastName) {
    this.lastName = Objects.requireNonNull(lastName, "lastName should not be null");
}

...然后,当Spring试图初始化user实例时,它就会接收到一个NullPointerException并将其直接报告给调用方。你的方法甚至不会被调用。

完整示例

public class User {

    private final int id; //<- make all fields final (they can't change any longer after construction)
    private final String uid;
    private final String firstName;
    private final String lastName;
    private final String email;
    private final String phone;
    private final int permission;
    private final int department;
    private final boolean deleted;

    public User(String uid, String firstName, String lastName, String email, String phone, int permission, int department, boolean deleted) {
        this.uid = Objects.requireNonNull(uid); //<- wrap all sets by requireNonNull
        this.firstName = Objects.requireNonNull(firstName);
        this.lastName = Objects.requireNonNull(lastName);
        this.email = Objects.requireNonNull(email);
        this.phone = Objects.requireNonNull(phone);
        this.permission = Objects.requireNonNull(permission);
        this.department = Objects.requireNonNull(department);
        this.deleted = Objects.requireNonNull(deleted);
    }
}
 类似资料:
  • 问题内容: 在Windows和Linux(两者均与python2.7一起)上运行时,以下代码具有不同的输出 在Windows上,输出为: 这是我所期望的 在linux上,它是: 其中不克隆全局对象和传递的参数。 我的问题是为什么他们的行为有所不同?以及如何使linux代码的行为与Windows相同? 问题答案: 添加到@Blckknght的答案:在Windows上,每个进程都“从头开始”导入原始模

  • 问题内容: 我正在服务器上运行多个docker容器,并且需要对所有容器上的存储库执行git pull。 我试过使用此: 但是它会出错: 它曾经工作过,但是后来突然停止工作,没有明显原因(我没有更改任何docker配置) 注意:的输出仅是容器ID: 问题答案: 使用Docker exec可以一次在容器上运行该命令,但是从您要在所有正在运行的容器上运行该命令的问题出发,就可以了。 我假设git已经安装

  • 嗨,伙计们,我有一个这样的东西 我可以检查tmp吗?如果所有数据都不为空,我会做些什么?,我知道使用if的简单方法,但如果使用if运算符,数据太多了?

  • Java如何在运行时获取一个类的所有对象实例?这个类不一定由Spring管理,也不一定是单例 根据类名+ClassLoader得到所有的类的对象实例,而不是反射并new一个对象

  • 问题内容: 是否有可能在Java中获得对对象的所有引用。 我需要检查的是对象是否删除了所有的回调订阅。 谢谢 问题答案: 这可以通过JVMTI实现,并且通常由堆分析器完成。但是,它不能在Java内部完成。

  • 但我得到一条错误消息,说无法在原语类型int上调用compareToIgnoreCase(int) 我如何修复这段代码,使它能够用整数值对列表进行排序?