截至这个问题(1.1.0),我已经获得了最新版本的 Micronaut,并且看到添加了对 @JsonView jackson 注释的支持。但是,当我将它添加到我的控制器并在我的 application.yml 中启用它时,我没有看到将注释应用于响应,我仍然收到完整的对象。注意:我也在使用 Lombok 和我的 POJO,我不知道这是否会造成干扰。控制器:@Controller("/v1")public class Controller {private MongoClient client;public Controller(MongoClient mongoClient) { this.client = mongoClient;}@Get("/ids")@Produces(MediaType.APPLICATION_JSON)@JsonView(Views.IdOnly.class)public Single<List<Grain>> getIdsByClientId(@QueryValue(value = "clientId") String clientId) { return Flowable.fromPublisher(getCollection().find(Filters.eq("data.clientId", clientId))).toList();}private MongoCollection<Grain> getCollection() { CodecRegistry grainRegistry = CodecRegistries.fromRegistries(MongoClients.getDefaultCodecRegistry(), CodecRegistries.fromProviders(PojoCodecProvider.builder().automatic(true).build())); return client .getDatabase("db").withCodecRegistry(grainRegistry) .getCollection("col", Data.class);}}数据:@Data@NoArgsConstructorpublic class Data { @JsonSerialize(using = ToStringSerializer.class) @JsonView(Views.IdOnly.class) private ObjectId id; private boolean active = true; @Valid @NotNull private DataMeta dataMeta; @Valid @NotNull private DataContent dataContent;}看法:public class Views { public static class IdOnly { }}应用程序.yml---micronaut: application: name: mojave-query-api---mongodb: uri: "mongodb://${MONGO_USER:user}:${MONGO_PASSWORD:password}@${MONGO_HOST:localhost}:${MONGO_PORT:27017}/db?ssl=false&authSource=db"---jackson.json-view.enabled: trueapplication.yml(替代版本也不起作用)---micronaut: application: name: mojave-query-api---mongodb: uri: "mongodb://${MONGO_USER:user}:${MONGO_PASSWORD:password}@${MONGO_HOST:localhost}:${MONGO_PORT:27017}/db?ssl=false&authSource=db"---jackson: json-view: enabled: true我不确定我的杰克逊行是否在 application.yml 文件中的错误位置,或者该功能是否没有按预期工作,或者我缺少什么完全不同的东西?输入赞赏!
1 回答
慕工程0101907
TA贡献1887条经验 获得超5个赞
上一个版本 application.yml 是正确的,但是您忘记将 Data 类标记为 @JsonView 类,因此工作版本是
@Data
@JsonView
@NoArgsConstructor
public class Data {
@JsonSerialize(using = ToStringSerializer.class)
@JsonView(Views.IdOnly.class)
private ObjectId id;
private boolean active = true;
@Valid
@NotNull
private DataMeta dataMeta;
@Valid
@NotNull
private DataContent dataContent;
}
添加回答
举报
0/150
提交
取消