1

jersey 2.0 を使用して REST サービスを作成しています。私は WebApplicationException を拡張しています

特定の例外を発生させるメソッド

if(json.equals("") || json.equals(" ")) {
      throw new ArgumentException("bad post data");
}


      public class ArgumentException extends RestException  {
         .....

         public ArgumentException(String message) {
             super(Status.BAD_REQUEST,message);
         }
    }


    public class RestException extends WebApplicationException  {
    ...........
     public RestException(Status status, String message) {

             super(Response.status(status)
                     .entity(message)
                     .type("text/plain")
                     .build()); 
             /*
             super(Response.status(status)
                     .entity(new ErrorBean(status.getStatusCode(),message))
                     .type(MediaType.APPLICATION_JSON)
                     .build()); */

         }


ErrorBean is a POJO

RestException 内のプレーン文字列としてエラーを返すメソッドが機能します (正しい http コード 400 とメッセージ)。ただし、ErrorBean POJO を渡して応答で MediaType.APPLICATION_JSON を使用しようとすると、「ヘッダーは既に送信されています」というエラーが表示され、http エラーコード 500 (配管に関する内部問題) と空の応答が表示されます。

私はこの質問も見ましたジャージーの例外に対してJSONまたはXMLを返す

JSON のようなコードとメッセージで例外を返すにはどうすればよいですか

{「コード」: 400、「メッセージ」: .... }

アップデート

SO とジャージー ユーザーのメーリング リストで回答を受け取りました。ステップは

  • 非 AJXB POJO にはアノテーションは必要ありません
  • アプリケーションに JacksonFeature を登録する

ResourceConfig rc = new ResourceConfig().packages("test").register(JacksonFeature.class);

4

1 に答える 1

2

Application/ResourceConfig にJacksonFeatureを登録する必要があります。

// Create JAX-RS application.
final Application application = new ResourceConfig()
        .packages("org.glassfish.jersey.examples.jackson")
        .register(JacksonFeature.class)
        // No need to register this provider if no special configuration is required.
        .register(MyObjectMapperProvider.class);

Jersey での Jackson サポートのドキュメントとexampleを見てください。

于 2013-07-25T12:10:53.100 に答える