Jersey 2.5.1をjax-rs実装として使用しています.MoxyをJSONシリアライザとして使用しています。私はweb.xmlに出力する検証エラーを出力するようにJerseyを設定しました。検証例外MapperがJSON形式を返さない
<init-param>
<param-name>jersey.config.beanValidation.enableOutputValidationErrorEntity.server</param-name>
<param-value>true</param-value>
</init-param>
検証エラーがプレーンテキスト(text/plain)で返されるため、正常に動作します。問題は、JSON形式の検証エラーメッセージを取得し、Jersey documentationに従って、JSONプロバイダをこれに設定する必要があることです。私が知っている限り、Moxyはその依存関係がクラスパスにアタッチされているときにJSONプロバイダとして設定されています。残念ながら、私の検証エラーはJSON(application/json)形式で返されません。何が悪いことができます。余分なビットを構成する必要がありますか?
p.s. Iコード次ValidationExceptionMapperをデバッグするとき、私はJSON形式を返さない理由は、私はヘッダを送信したという事実によるものであったコメントで述べたように、メディアタイプtext/plainの
if (property != null && Boolean.valueOf(property.toString())) {
final List<Variant> variants = Variant.mediaTypes(
MediaType.TEXT_PLAIN_TYPE,
MediaType.TEXT_HTML_TYPE,
MediaType.APPLICATION_XML_TYPE,
MediaType.APPLICATION_JSON_TYPE).build();
final Variant variant = request.get().selectVariant(variants);
if (variant != null) {
response.type(variant.getMediaType());
} else {
// default media type which will be used only when none media type from {@value variants} is in accept
// header of original request.
// could be settable by configuration property.
response.type(MediaType.TEXT_PLAIN_TYPE);
}
response.entity(
new GenericEntity<List<ValidationError>>(
ValidationHelper.constraintViolationToValidationErrors(cve),
new GenericType<List<ValidationError>>() {}.getType()
)
);
}
レスポンスのコンテンツタイプ(text/plainまたは何か)は何ですか?呼び出すリソースメソッドと、クライアントからサーバーへの受け入れヘッダーで何を送信しているかを表示できますか? –
あなたが求めた情報を取得し始めました。私がテスト用に使用していたプラグインが、ヘッダ:Accept/application/jsonを追加していないことに気付きました。それを追加した後、私はJSON形式で応答しています。 – Bart