如何使用jersey来编组自定义arrayList对象?

时间:2012-11-30 19:44:55

标签: java spring jersey jackson

所以,开始我有这个课程:

    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。

有什么想法吗?

1 个答案:

答案 0 :(得分:0)

似乎@JsonRootResource更多地保留了属性,而不是类级声明。这应该会产生编译错误,但不会。