【问题标题】:JHipster Spring How can i disable jackson json serialisation ?JHipster Spring 如何禁用杰克逊 json 序列化?
【发布时间】:2017-12-29 13:07:15
【问题描述】:

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

【问题讨论】:

    标签: java spring web-services jackson jhipster


    【解决方案1】:

    第一个想法

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

    如果您在 REST 控制器中的映射返回 GraphResponse,Jackson 会尝试对其进行序列化。

    因此,您可以为该类添加自己的序列化器:

    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 到对象的转换。由于 Jackson 被执行,因为 MappingJackson2HttpMessageConverter 被自动注册,你也可以覆盖 MappingJackson2HttpMessageConverter 并实现一些东西来关闭序列化......

    第四个想法

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

    【讨论】:

      猜你喜欢
      • 2015-04-07
      • 2012-01-26
      • 2012-09-10
      • 2017-06-04
      • 1970-01-01
      • 1970-01-01
      • 2015-02-23
      • 2013-05-20
      • 2016-12-07
      相关资源
      最近更新 更多