だから、私はこのクラスを持っています:
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を使用しています。
何か案は?