1

必須プロパティ「name」とオプション プロパティ「email」を持つモデル Bean「Vendor」があるとします。

class Vendor {

    @Email
    private String email;

    @NotNull
    private String name;

}

@Email は Null を許可します。

@Controller自分と自分のフローでもhibernate-validation を使用したいと考えています。両方のシナリオで、電子メールの空のフィールドを持つ投稿されたフォームが NULL ではなく "" にバインドされるという問題があります。

StringTrimmerEditor"" を NULL に変換することで問題が解決するようです。私の場合、グローバルに実装することを提案するSPR-7077@Controllerを見つけました。しかし、これは私のフローでは機能しません。StringTrimmerEditor@ControllerAdvice

spring webflow で JSR-303 検証のためにグローバルに空の文字列 ("") が NULL に変換されるようにするにはどうすればよいですか?

4

2 に答える 2

1

空の文字列の Null 値をサポートする構成を見つけたようです。私の @Controller については、 my の に固執しStringTrimmerEditorます@ControllerAdvice。ここには新しいものはありません。

SWFの場合ConversionService、トリックを行うようです:最初に、Converter「」をNullに変換するを作成します:

public class StringToNullConverter implements Converter<String, String> {

    @Override
    public String convert(String source) {
        if (StringUtils.isEmpty(source)) {
            return null;

        }
        return source;
    }

}

これを春に登録する必要があります。

import org.springframework.core.convert.*;

@Configuration
public class SpringConfiguration {

    @Bean public ConversionService conversionService() {
        DefaultFormattingConversionService conversionService = new DefaultFormattingConversionService();        
        conversionService.addConverter(new StringToNullConverter());
        return conversionService;
    }

}

これまでのところ、新しいことは何も起こらず、org.springframework.core.convertパッケージについて話している. SWF グルーがorg.springframework.binding.convertパッケージに入っています。

import org.springframework.binding.convert.*;

@Bean public ConversionService flowConversionService(org.springframework.core.convert.ConversionService conversionService) {
    DefaultConversionService service = new DefaultConversionService(conversionService);
    return service;
}

これを で SWF に接続し <webflow:flow-builder-services [..] conversion-service="flowConversionService" />ます。

これは少し多すぎるように見えますが、機能します。同じことを達成するために2つの異なる実装(StringTrimmerEditorおよび)があるため、より良い方法があるはずです。StringToNullConverter私にとっては、それがConversionService唯一無二の方法のように思えます。しかし、 Spring でそれを行う方法がわかりませんでした@Controller

于 2013-10-27T13:59:27.153 に答える