我正在使用jHipster开发一个rest api webservice,我想制作像facebook graph api这样的字段过滤器(例如:http://myjhipster_web_service.com/api/user?fields=id,username)问题是我不知道如何让jackson Json序列化这样做,所以我决定做一个ResponseBodyAdvice和我自己序列化数据,并且出于性能考虑,我想禁用Jackson序列化,以便响应不会被序列化两次。所以我的问题是如何在Jhipster中仅禁用jackson响应序列化?是否有其他解决方案来完成这项工作?
第一个想法
您可以将请求(所选字段)和结果(用户/ 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项目中