【问题标题】:How to hide json field when using Springdata pageable?使用Springdata pageable时如何隐藏json字段?
【发布时间】:2018-12-29 07:37:32
【问题描述】:

目前我正在使用 SpringData 来构建我的宁静项目。

我正在使用 Page findAll(Pageable pageable, X condition, String... columns); ,这个方法。结果是这样的:

{

"content": [
    {
        "id": 2,
        "ouId": 1,
        "pClassId": 3,
        "isPublic": 0,
        "accessMethod": 3,
        "modifierName": null
    }
],
"last": true,
"totalPages": 1,
"totalElements": 3,
"number": 0,
"size": 10,
"sort": [
    {
        "direction": "DESC",
        "property": "id",
        "ignoreCase": false,
        "nullHandling": "NATIVE",
        "ascending": false,
        "descending": true
    }
],
"first": true,
"numberOfElements": 3

}

问题是如何在内容中隐藏一些特定的 json 字段? 而且@JsonIgnore注解不灵活,我在不同API中需要的字段不一样。

我试图写一个注解,但是在处理Page的时候,我发现内容是不可修改的。

所以,希望有人可以帮助我。

【问题讨论】:

    标签: spring spring-boot spring-data-jpa spring-data mybatis


    【解决方案1】:

    如果您不想在 Pojo 上添加注释,也可以使用 Genson

    以下是如何在不使用任何注释的情况下排除包含字段的字段(如果需要,您也可以使用注释,但您可以选择)。

    Genson genson = new Genson.Builder().exclude("securityCode", User.class).create();
    // and then
    String json = genson.serialize(user); 
    

    或者使用 flexjson

    import flexjson.JSONDeserializer;
    import flexjson.JSONSerializer;
    import flexjson.transformer.DateTransformer;
    
    public String toJson(User entity) {
            return new JSONSerializer().transform(new DateTransformer("MM/dd/yyyy HH:mm:ss"), java.util.Date.class)
           .include("wantedField1","wantedField2")
                    .exclude("unwantedField1").serialize(entity);
    }
    

    【讨论】:

      【解决方案2】:

      您必须使用如下的自定义序列化:

      @JsonComponent
      public class MovieSerializer extends JsonSerializer<Movie> {
      
          @Override
          public void serialize(Movie movie, JsonGenerator jsonGenerator, SerializerProvider serializerProvider) throws IOException {
      
              jsonGenerator.writeStartObject();
      
              // The basic information of a movie
              jsonGenerator.writeNumberField("id", movie.getId());
              jsonGenerator.writeStringField("name", movie.getName());
              jsonGenerator.writeStringField("poster", movie.getPoster());
              jsonGenerator.writeObjectField("releaseDate", movie.getReleaseDate());
              jsonGenerator.writeObjectField("runtime", movie.getRuntime());
              jsonGenerator.writeStringField("storyline", movie.getStoryline());
              jsonGenerator.writeStringField("rated", movie.getRated());
              jsonGenerator.writeNumberField("rating", movie.getRating());
              jsonGenerator.writeEndObject();
          }
      }
      

      然后用 @JsonSerialize(using = MovieSerializer.class) 注释你的模型类

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-07-29
        • 2013-04-06
        • 2011-07-25
        • 2014-04-01
        • 2021-03-19
        • 2019-10-04
        相关资源
        最近更新 更多