如何将 long 传递给 spring PUT 控制器

How to pass long to the spring PUT controller

我有控制器:

@RestController
public class AdminController {

    @PutMapping("/path/max_file_size")
    public void setMaxFileSize(@ModelAttribute MaxFileSizeDto size) {
        System.out.println(size.getSize());
    }

    public static class MaxFileSizeDto {
        private long size;

        public long getSize() {
            return size;
        }

        public void setSize(long size) {
            this.size = size;
        }
    }
}

我用 postman 发送 http 请求:

我总是得到 0
size.getSize()

我做错了什么?

在添加模型之前,您应该记住,ModelController 应该分开。这意味着将您的模型保存在另一个包或 class.For posting/putting 数据中,您应该使用 Object(String, Integer,Long) 而不是 primitive(int, long etc).

假设你的模型 Class

MaxFileSizeDto.java

public static class MaxFileSizeDto {
    private Long size;

    public Long getSize() {
        return size;
    }

    public void setSize(Long size) {
        this.size = size;
    }
}

您的控制器 class 将是:

@RestController
public class AdminController {

    @PutMapping("/path/max_file_size")
    public void setMaxFileSize(@ModelAttribute MaxFileSizeDto size) {
        System.out.println(size.getSize());
    }
}

当您以 application/x-www-form-urlencoded 格式发送数据时,您的数据将以这种格式发送并直接绑定到 @ModelAttribute 定义的 class.

param1=data1&param2=data2&param3=data3

但是邮递员在内部以这种格式发送数据。 如果您想将数据作为 @RequestBody 发送,那么您应该使用 json 数据,说明您的内容类型是 application/json。为此,您应该 select raw 邮递员的单选按钮和 select application/json 的下拉菜单。(行中的最后一个元素) 在这些情况下,数据将为

{
    "size":123456
}