Использование InitBinder с объектами команд - PullRequest
0 голосов
/ 11 мая 2018

У меня есть объект команды, который представляет отправленный объект формы.Если значение из поля ввода формы пустое, я хочу, чтобы оно было null в объекте команды.

Я прочитал другой ТАК вопрос , который показал использование 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

Ответы [ 2 ]

0 голосов
/ 11 мая 2018

Проблема в том, что я использую интерфейс на моем контроллере. Реализация проксируется 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));
}
0 голосов
/ 11 мая 2018

Вам необходимо добавить @ControllerAdvice в класс контроллера.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...