That's one caveat of Java - inner classes default constructor isn't a no-arg constructor. Their default constructor takes 1 parameter of type - the outer class.
So, use <constructor-arg> to pass a bean of type ExampleBean
Of course, use non-static inner classes only if this is necessary. If the class is only what you have shown, then make it static.
Or move it to a new file. Then you won't have the above restriction. Preferring static inner classes is a good practice not only for spring beans, but in Java in general.
@Controller
@RequestMapping(value="/demo")
public class AppController{
@RequestMapping(value="/demo-method")
public String processer(HttpServletRequest request , @ModelAttribute("demoDTO") DemoDTO demoDto){
//Do something
}
//如上方法中需要应用内部类DemoDTO作为参数接收容器,因而xxxxx^^^ just do it like this.
@Getter
@Setter
@Accessors(chain = true)
@Access(AccessType.FIELD)
@NoArgsConstructor
static class DemoDTO {
private Long id;
private String address;
private String tel;
}
}
将内部类定义为static
另,若使用BeanUtils.copyProperties或PropertyUtils.copyProperties方法,建议使用Spring提供的,而非apach
另,若使用BeanUtils.copyProperties或PropertyUtils.copyProperties方法,建议使用Spring提供的,而非apache commons包下的,
因apache所提供的BeanUtils对内部类支持不是很好,无法正常拷贝相关属性;