JHipster Spring如何禁用jackson json序列化?

时间:2017-12-29 13:07:15

标签: java spring web-services jackson jhipster

我正在使用jHipster开发一个rest api webservice,我想像facebook graph api那样进行字段过滤(例如:http://myjhipster_web_service.com/api/user?fields=id,username) 问题是我不知道如何让杰克逊Json序列化做到这一点,所以我决定做一个ResponseBodyAdvice并自己序列化数据, 对于性能问题,我想禁用Jackson序列化,以便响应不会被序列化两次。 所以我的问题是如何在Jhipster中仅禁用jackson响应序列化?还有另一种解决方案吗?

1 个答案:

答案 0 :(得分:0)

第一个想法

您可以将请求(所选字段)和结果(用户/ s)包装在REST控制器中,例如:在某个类GraphResponse中。

如果REST控制器中的映射返回GraphResponse,Jackson会尝试序列化该映射。

因此,您可以为该类添加自己的seriablizer:

public class GraphResponseSerializer extends JsonSerializer<GraphResponse> {

@Override
public void serialize(GraphResponse response, JsonGenerator jsonGenerator, 
    SerializerProvider serializerProvider) throws IOException, JsonProcessingException {
    // use jsonGenerator to write the JSON-stuff
}

}

您可以通过JacksonConfiguration或使用如下注释注册该序列化程序:

@JsonSerialize(using = GraphResponseSerializer.class)
public class GraphResponse {
   // setter getter for "fields"
   // setter getter for the actual response-object
}

第二个想法

您可以通过添加自己的BeanSerializerModifier来修改bean /实体的序列化方式,这是(AFAIR)负责的。

第三个想法

您可以添加自己的HttpMessageConverter,它将对象处理为http-output,将http-input处理为对象转换。由于杰克逊被执行,因为MappingJackson2HttpMessageConverter会自动注册,您可以覆盖MappingJackson2HttpMessageConverter并实现某些内容来转变序列化......

第四个想法

在某些项目中,我们使用了GraphQL(http://graphql.org/),您可以使用图形查询,这非常强大,并根据实体为您完成所有过滤等操作。 GraphQL还有一个spring-boot-starter,所以你可以很容易地将它添加到jhipster项目中