使用Springdata可分页时如何隐藏json字段?

时间:2018-07-21 00:44:38

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

目前,我正在使用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时,我发现内容不可修改。

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

2 个答案:

答案 0 :(得分:1)

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

这里是如何排除不带任何注释的字段(如果需要,也可以使用注释,但是可以选择)。

 re=$(docker-compose -f prod.yml restart 2>&1) 

使用flexjson或

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

答案 1 :(得分:1)

您必须使用自定义序列化,如下所示:

@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)