Spring为嵌套表单对象配置映射

时间:2015-06-23 15:04:37

标签: java spring spring-mvc-initbinders

我有以下课程

public class RequestResponseWrapper {

    MyDto myDto;

}

public class MyDto {

    private String field1;
    private String field2;
    ....
}

我有以下控制器方法:

@RequestMapping(...)
@ResponseStatus(HttpStatus.NO_CONTENT)
@ResponseBody
public RequestResponseWrapper putData(@ModelAttribute RequestResponseWrapper requestResponseWrapper) {
        ....
}

我写了以下活页夹:

@InitBinder("requestResponseWrapper")
    public void initBinder(WebDataBinder binder) {
        binder.registerCustomEditor(MyDto.class, new PropertyEditorSupport() {

            public void setAsText(String name) {
                setValue(StringUtils.isNotBlank(name) ? name : null);
            }
        });
}

现在如果我从客户端获得空对象,它将转换为以下结构:

requestResponseWrapper--
                        myDto--
                               field1 = null
                               field2 = null
                               ....

预期结果:

requestResponseWrapper--
                        myDto = null

如何更改我的代码?

1 个答案:

答案 0 :(得分:0)

如果值为null,则不应将该值设置为null。当您的值不为null时,只需将其设置为您想要的值(名称)。我希望这是有道理的。

    @InitBinder("requestResponseWrapper")
    public void initBinder(WebDataBinder binder) {
            binder.registerCustomEditor(MyDto.class, new PropertyEditorSupport() {

                    public void setAsText(String name) {
                            if (StringUtils.isNotBlank(name)) {
                                    setValue(name);
                            }

                    }
            });
    }