Serialization 我可以指定在RestEasy中用于方法结果转换的jackson@JsonView吗?

Serialization 我可以指定在RestEasy中用于方法结果转换的jackson@JsonView吗?,serialization,jackson,resteasy,wildfly,Serialization,Jackson,Resteasy,Wildfly,我正在使用基于@JsonView的序列化模型。我通常使用ContextResolver配置jackson,如下所示: @Override public ObjectMapper getContext(Class<?> aClass) { // enable a view by default, else Views are not processed Class view = Object.class; if (aClass.getPackage().getN

我正在使用基于
@JsonView
的序列化模型。我通常使用
ContextResolver
配置jackson,如下所示:

@Override
public ObjectMapper getContext(Class<?> aClass) {
    // enable a view by default, else Views are not processed
    Class view = Object.class;
    if (aClass.getPackage().getName().startsWith("my.company.entity")) {
        view = getViewNameForClass(aClass);
    }
    objectMapper.setSerializationConfig(
         objectMapper.getSerializationConfig().withView(view));
    return objectMapper;
}
并在视图
JSONEntity
下序列化。RestEasy是否可以做到这一点?如果不是,我该如何效仿

编辑:我知道我可以自己完成序列化:

public String getAll(@Context UriInfo info, @Context Providers factory) {
    List<T> entities = getAll(info.getQueryParameters());
    ObjectMapper mapper = factory.getContextResolver(
         ObjectMapper.class, MediaType.APPLICATION
    ).getContext(entityClass);
    return mapper.writeValueAsString(entities);
}
publicstringgetall(@Context-UriInfo,@Context-Providers-factory){
List entities=getAll(info.getQueryParameters());
ObjectMapper映射器=factory.getContextResolver(
ObjectMapper.class、MediaType.APPLICATION
).getContext(entityClass);
返回mapper.writeValueAsString(实体);
}
然而,这充其量是笨拙的,并且挫败了让框架处理这个样板文件的整个想法。

结果是,可以简单地用
@JsonView
注释一个特定的端点(就像在我的问题中一样),jackson将使用这个视图。谁会猜到呢

您甚至可以通过泛型方法()来实现这一点,但这将我与RestEasy联系在一起:

@Override
public void writeTo(Object value, Class<?> type, Type genericType, 
        Annotation[] annotations,  MediaType mediaType, 
        MultivaluedMap<String, Object> httpHd, 
        OutputStream out) throws IOException {
    Class view = getViewFromType(type, genericType);
    ObjectMapper mapper = locateMapper(type, mediaType);

    Annotation[] myAnn = Arrays.copyOf(annotations, annotations.length + 1);
    myAnn[annotations.length] = new JsonViewQualifier(view);

    super.writeTo(value, type, genericType, myAnn, mediaType, httpHd, out);
}

private Class getViewFromType(Class<?> type, Type genericType) {
    // unwrap collections
    Class target = org.jboss.resteasy.util.Types.getCollectionBaseType(
            type, genericType);
    target = target != null ? target : type;
    try {
        // use my mix-in as view class
        return Class.forName("example.jackson.JSON" + target.getSimpleName());
    } catch (ClassNotFoundException e) {
        LOGGER.info("No view found for {}", target.getSimpleName());
    }
    return Object.class;
}
@覆盖
public void writeTo(对象值、类类型、类型genericType、,
注释[]注释,MediaType MediaType,
多值MAP httpHd,
OutputStream out)抛出IOException{
类视图=getViewFromType(类型,genericType);
ObjectMapper mapper=locateMapper(类型,mediaType);
Annotation[]myAnn=Arrays.copyOf(annotations,annotations.length+1);
myAnn[annotations.length]=新的JsonViewQualifier(视图);
super.writeTo(value、type、genericType、myAnn、mediaType、httpHd、out);
}
私有类getViewFromType(类类型,类型genericType){
//拆封收藏
Class target=org.jboss.resteasy.util.Types.getCollectionBaseType(
类型,泛型);
target=target!=null?target:type;
试一试{
//使用我的mix-in作为视图类
返回Class.forName(“example.jackson.JSON”+target.getSimpleName());
}catch(classnotfounde异常){
info(“找不到{}的视图”,target.getSimpleName());
}
返回Object.class;
}
@Override
public void writeTo(Object value, Class<?> type, Type genericType, 
        Annotation[] annotations,  MediaType mediaType, 
        MultivaluedMap<String, Object> httpHd, 
        OutputStream out) throws IOException {
    Class view = getViewFromType(type, genericType);
    ObjectMapper mapper = locateMapper(type, mediaType);

    Annotation[] myAnn = Arrays.copyOf(annotations, annotations.length + 1);
    myAnn[annotations.length] = new JsonViewQualifier(view);

    super.writeTo(value, type, genericType, myAnn, mediaType, httpHd, out);
}

private Class getViewFromType(Class<?> type, Type genericType) {
    // unwrap collections
    Class target = org.jboss.resteasy.util.Types.getCollectionBaseType(
            type, genericType);
    target = target != null ? target : type;
    try {
        // use my mix-in as view class
        return Class.forName("example.jackson.JSON" + target.getSimpleName());
    } catch (ClassNotFoundException e) {
        LOGGER.info("No view found for {}", target.getSimpleName());
    }
    return Object.class;
}