0

だから、私はこのクラスを持っています:

    public class PaginatedList<?> extends ArrayList<?>{
       private int startIndex;
       private int endIndex;

       public PaginatedList(int startIndex, int endIndex...){
           this.startIndex = startIndex;
           this.endIndex = endIndex;
           //Do pagination stuffs.
       }
    }

そしてこのクラス:

    public class UserList extends PaginatedList<User>{

       public UserList(int startIndex, int endIndex...){
          super(startIndex, endIndex...);
       }

    }

ここで、リソースに UserList を返させると、期待どおりにユーザーのリストが出力されます。

[
  {
    "userName":"binky",
    "age":115
  }
]

しかし、出力を次のようにしたい:

{
  "users":
   [
     {
       "userName":"binky",
       "age":115
     }
   ],
  "pagination":
   {
     "startIndex":5,
     "endIndex":10
   }
}

そのため、両方に @JSONRootName("") のアノテーションを付けます。

@JsonRootName("pagination")
public class PaginatedList extends ArrayList<?>{}
@JsonRootName("activities")
public class UserList extends PaginatedList<User>{}

ObjectMapper を設定するクラスを作成しました。

        @Provider 
        @Produces(MediaType.APPLICATION_JSON)
        public class Resolver implements ContextResolver<ObjectMapper>{

            private ObjectMapper objectMapper;

            public ObjectMapperProvider(){
                objectMapper = new ObjectMapper();
            }

            @Override
            public ObjectMapper getContext(Class<?> type) {
                if(type.getAnnotation(JsonRootName.class) != null){
                         objectMapper.configure(DeserializationConfig.Feature.UNWRAP_ROOT_VALUE, true);
                }else{
                       objectMapper.configure(DeserializationConfig.Feature.UNWRAP_ROOT_VALUE, false);
                }
                return objectMapper;
            }
        }

それでも、この実装は私の問題を解決しません。整列化された json は、ラップされていないルート値を返しません。

ジャージPOJOMAPPINGを使用しています。

何か案は?

4

1 に答える 1

0

@JsonRootResource は、クラスレベルの宣言ではなく、プロパティ用に予約されているようです。これにより、コンパイル エラーが発生するはずですが、発生しません。

于 2012-12-05T20:20:15.693 に答える