私はSpringMVCRESTプロジェクトを遊んで変換し、Jerseyを使用するようにしています。また、クラスの1つにメソッドがあります。
@ExceptionHandler(HttpMessageNotReadableException.class)
これは、XMLメッセージの逆シリアル化中に例外をキャッチします。このようにして、ユーザーがPOSTリクエストで不正なXMLを送信したことを検出し、400/500の標準HTMLエラーページではなく、XMLエラー応答を返すことができます。
ジャージーに似たようなものはありますか?例外マッピングクラスを作成してみました
@Provider
public class HttpMessageNotReadableException
implements ExceptionMapper<org.xml.sax.SAXNotRecognizedException> {
しかし、リソースクラス内から例外をスローしたときだけ、着信エラーはキャッチされないようです。
そこで、メソッドで文字列を取得し、逆シリアル化を実行してエラーをキャッチすることを考えました。
@POST
@Path("/product")
public Response createProduct(String createRequest) {
try {
// de-serialize
// do work ...
} catch ...
それ以外の
@POST
@Path("/product")
public Response createProduct(CreateProduct createRequest) {
// do work ...
しかし、それは正しくないようです。同じエラーチェックですべてのクラスを汚染するだけです。
また、を使用して自分のリーダーを実装することについて読みました
@Provider
class MyXmlReader implements MessageBodyReader {
しかし、JAXBはすでに逆シリアル化を行っているので、それは車輪の再発明のように思えます。エラーをキャッチしたいだけです。
悪い着信XMLをキャッチするためのより良い方法があるかどうか誰かが知っていますか?