【问题标题】:Using InitBinder with command objects将 InitBinder 与命令对象一起使用
【发布时间】:2018-05-11 17:51:14
【问题描述】:

我有一个表示提交的表单对象的命令对象。如果表单输入字段中的值是空白的,我希望它是命令对象中的null

我读到了一个不同的SO question,它显示使用InitBinder

我试了一下,但从未调用过 initBinder 方法。

我的控制器

package com.example;

import org.springframework.beans.propertyeditors.StringTrimmerEditor;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.WebDataBinder;
import org.springframework.web.bind.annotation.InitBinder;
import com.example.MyDTO;

@Controller
public class MyControllerImpl implements MyController {

    @InitBinder("myControllerImpl")
    public void initBinder(WebDataBinder binder) {
        System.out.println("init binder");
        binder.registerCustomEditor(String.class, new StringTrimmerEditor(true));
    }

    @Override
    public String someAction( MyDTO someDTO ) {

        System.out.println(someDTO);

        // Do something with DTO. I want blank values to be null here

        return "somePage;
    }

}

DTO

package com.example;

public class MyDTO {

    private String name;

    public String getName() {

        return name;
    }

    public String setName() {

        return name;
    }

}

我也尝试将类名添加到InitBinder 注释

@InitBinder("myControllerImpl")

但它不起作用。

我缺少什么来调用初始化绑定器?

我正在使用 Java 6 和 Spring 3

【问题讨论】:

    标签: java spring spring-mvc


    【解决方案1】:

    您需要在控制器类中添加@ControllerAdvice

    【讨论】:

    • 错过了。不幸的是,我们有点过时并且使用 Spring 3.1.1 不确定我是否可以升级到 3.2,很可能不会。所以这种方式可能行不通。
    • 我有 InitBinder 注释,但看起来 @ControllerAdvice 注释直到 3.2 才添加
    • @eric 正如我所写,文档说它应该按原样工作,不知道你这边发生了什么
    • 看起来是我的界面导致了这个问题。当我删除接口并将接口中的所有 @RequestMappings 添加到 Impl 时,它起作用了。不太清楚为什么,但这是一个起点。
    【解决方案2】:

    问题是我在控制器上使用了一个接口。该实现由 Spring AOP 代理。为了让它工作,我必须在界面上添加以下方法:

    @InitBinder
    void initBinder(WebDataBinder binder);
    

    然后在实现中我有

    @Override
    public void initBinder(WebDataBinder binder) {
        System.out.println("init binder!");
        binder.registerCustomEditor(String.class, new StringTrimmerEditor(true));
    }
    

    【讨论】:

      猜你喜欢
      • 2012-05-23
      • 2020-10-03
      • 1970-01-01
      • 2012-02-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-05-24
      • 2012-05-21
      相关资源
      最近更新 更多