如何将 DTO 传递给控制器

时间:2020-12-23 10:16:23

标签: java spring spring-boot spring-mvc

我需要传递给控制器​​ 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 中)?

4 个答案:

答案 0 :(得分:0)

如您所说,解决方案是向 MyDto 类添加 getter/setter。如果您无法更改该类,我认为您可以通过配置应用程序的对象映射器来实现您的目标,即添加自定义反序列化器来告诉 Jackson 如何从 json 字符串创建 MyDto。

答案 1 :(得分:0)

一种方法是扩展 DTO 类并添加 getter/setter。

答案 2 :(得分:0)

  1. 扩展 MyDto 类并向扩展的 DTO 添加 getter 和 setter。

  2. 在您的方法参数中使用 @RequestBody,如下所示:

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

答案 3 :(得分:0)

要完成@Arun的回答above,如果您想使用@Controller注解代替@RestController,您必须像这样将@RequestBody替换为@ModelAttribute< /p>

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