目前我正在使用SpringData来构建我的restful项目。
我正在使用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中需要的字段是不同的。
我试着写一个注释,但在处理页面时,我发现内容是不可修改的。
所以,希望有人可以帮助我。
如果你不想在Pojos上添加注释,你也可以使用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);
}
您必须使用如下自定义序列化:
@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)
注释您的模型类