0

以下の構成で、バックエンド アプリケーションのスプリング (4.2.0.RELEASE)、休止状態バリデーター (5.2.1.Final)、および検証 API (1.1.0.Final) を使用して、JSR 検証に取り組んでいます。

<bean id="validatorFactory" class="org.springframework.validation.beanvalidation.LocalValidatorFactoryBean">
    <property name="validationMessageSource" ref="messageSource" />
</bean>

<bean class="org.springframework.expression.spel.standard.SpelExpressionParser" />

しかし、私のアプリケーションでは JSR 303 アノテーションが機能していません。

注: POJO クラスに jsr 303 アノテーションを追加し、サービス クラス (POJO を使用している) に @Validated を追加し、メソッド レベルで @Validated を追加しようとしました。

更新:サービスインターフェース

@Validated 
public interface SampleService {

@NotNull
@Valid
Account getAccount( @NotNull @Valid String customerKey, @NotNull String name);

サービスの実装

@Service
@Validated
@Transactional( readOnly=true )
public class SampleServiceImpl
    implements SampleService
{
    private final SampleDao sampleDao;

@Inject
public SampleServiceImpl( SampleDao sampleDao)
{
    this.sampleDao= sampleDao;
}


@Override
@Validated
public Customer getAccount( String customerKey, String name)
{
    try {
        return sampleDao.getAccount( customerKey, name);
    }
    catch ( EmptyResultDataAccessException e ) {
        throw new NotFoundException( e );
    }
}
4

2 に答える 2

0

重複した質問です。これを読んでください

サービス層での検証

このリンクは、デフォルトでは、スプリング アノテーションの検証がコントローラー レイヤーでのみサポートされていることを説明しています。サービス層の場合、いくつかのスプリング コンポーネントを再利用して構成を微調整するか、独自の AOP を展開します。しかし、前者を選択することをお勧めします。再利用。

于 2016-04-13T13:10:02.327 に答える
0

いくつかあります:

1- POJO を検証する必要があるため、POJO を作成し、必要な検証で注釈を付けます。

public class Customer {

    @NotNull
    private String name;

    @NotNull
    private String customerKey;

    ...

}

2- @Valid アノテーションを実装に含める必要があります。

@Override
public Customer getAccount(@Valid Customer customer, BindingResult bindingResult) {}

<mvc:annotation-driven/>3 -Spring xmlがあることを確認します。

BindingResult はメソッドでは必須ではありませんが、見つかった検証エラーが表示され、応答を返す前にエラーを処理できるようになります。

于 2016-04-13T08:39:40.170 に答える