我需要传递给控制器 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 中)?
答案 0 :(得分:0)
如您所说,解决方案是向 MyDto
类添加 getter/setter。如果您无法更改该类,我认为您可以通过配置应用程序的对象映射器来实现您的目标,即添加自定义反序列化器来告诉 Jackson 如何从 json 字符串创建 MyDto。
答案 1 :(得分:0)
一种方法是扩展 DTO 类并添加 getter/setter。
答案 2 :(得分:0)
扩展 MyDto 类并向扩展的 DTO 添加 getter 和 setter。
在您的方法参数中使用 @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);
}
}