首页 > 解决方案 > 如何将 DTO 传递给控制器

问题描述

我需要传递给控制器​​ DTO 对象。我的带有公共方法的 DTO 对象,它总是得到空值:

public class MyDto {
    public String name;
    public String age
}

// MyController
@Controller
public class MyController {

    @PostMapping("/")
    public String data(MyDto obj) { 
        obj.name // always null;
    }
}

但是如果我将 getter 和 setter 添加到MyDto所有工作正常。我怎样才能MyDto只通过公共字段(我无法更改此对象,因为它位于另一个我无权访问的 jar 中)?

标签: javaspringspring-bootspring-mvc

解决方案


要完成上面的@Arun 答案,如果您想使用@Controller注释而不是@RestController,您必须像这样@RequestBody替换@ModelAttribute

@Controller
public class MyController {
    @PostMapping("/")
    public String data(@ModelAttribute MyDto obj) {
        System.out.println(obj.name);
    }
}

推荐阅读