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

问题描述 投票:0回答:1

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

java spring web-services jackson jhipster
1个回答
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项目中

© www.soinside.com 2019 - 2024. All rights reserved.