次のような Bean 検証を使用して、JAX-RS リソース クラス フィールドまたはメソッド パラメータを簡単に検証できます。
@Size(min = 18, max = 80, message = "Age must be between {min} and {max}.") String age;
エラー メッセージを JSP ページにバインドする最も簡単な方法は何ですか?
(たとえば、Jersey または Resteasy で Java EE 7 を使用しています)
次のような Bean 検証を使用して、JAX-RS リソース クラス フィールドまたはメソッド パラメータを簡単に検証できます。
@Size(min = 18, max = 80, message = "Age must be between {min} and {max}.") String age;
エラー メッセージを JSP ページにバインドする最も簡単な方法は何ですか?
(たとえば、Jersey または Resteasy で Java EE 7 を使用しています)
編集1
このユースケースをカバーする新しいアノテーション@ErrorTemplateを Jersey 2.3 に導入しました。MVC を使用した JAX-RS および Bean 検証エラーの処理では、詳細について説明し、使用方法を示します。
Jersey を使用すると、次の手順を実行できます。
jersey-bean-validation
。jersey-mvc-jsp
Maven を使用している場合は、これらの依存関係をpom.xml
<dependency>
<groupId>org.glassfish.jersey.ext</groupId>
<artifactId>jersey-mvc-jsp</artifactId>
<version>2.1</version>
</dependency>
<dependency>
<groupId>org.glassfish.jersey.ext</groupId>
<artifactId>jersey-bean-validation</artifactId>
<version>2.1</version>
</dependency>
それ以外の場合は、モジュールの依存関係のページを参照して、必要なライブラリ ( jersey-mvc-jspおよびjersey-bean-validation ) のリストを取得してください。
Bean Validation ランタイムは、エンティティ (または JAX-RS リソース) の検証中に何か問題が発生すると ConstraintViolationException をスローします。Jersey 2.x は、(正確には) そのような例外を処理するための標準の ExceptionMapper を提供するValidationException
ため、別の方法で処理したい場合は、独自の ExceptionMapper を作成する必要があります。
@Provider
@Priority(Priorities.USER)
public class ConstraintViolationExceptionMapper implements ExceptionMapper<ConstraintViolationException> {
@Override
public Response toResponse(final ConstraintViolationException exception) {
return Response
// Define your own status.
.status(400)
// Put an instance of Viewable in the response so that jersey-mvc-jsp can handle it.
.entity(new Viewable("/error.jsp", exception))
.build();
}
}
上記の ExceptionMapper を使用すると、スローされたすべての ConstraintViolationExceptions を処理し、最終的な応答にHTTP 400
応答ステータスが含まれます。レスポンスに渡されたエンティティ ( Viewable ) は、モジュールから MessageBodyWriter によって処理され、jersey-mvc
基本的には処理された JSP ページが出力されます。Viewable クラスの最初のパラメーターは JSP ページへのパス (相対パスまたは絶対パスを使用できます) で、2 番目は JSP がレンダリングに使用するモデルです (モデルは${it}
JSP の属性を介してアクセスできます)。このトピックの詳細については、Jersey ユーザー ガイドのMVCに関するセクションを参照してください。
最後に、プロバイダーをアプリケーションに登録する必要があります( Application クラスを拡張する JerseyのResourceConfigを使用した例を示します)。
new ResourceConfig()
// Look for JAX-RS reosurces and providers.
.package("my.package")
// Register Jersey MVC JSP processor.
.register(JspMvcFeature.class)
// Register your custom ExceptionMapper.
.register(ConstraintViolationExceptionMapper.class)
// Register Bean Validation (this is optional as BV is automatically registered when jersey-bean-validation is on the classpath but it's good to know it's happening).
.register(ValidationFeature.class);