java - 在 Micronaut 休息端点的 JSON 中包含 null 和空属性

标签 java jackson micronaut micronaut-client

Micronuat 的 JSON 序列化默认配置是 JsonInclude.Include.NON_EMPTY,它不包含空值或 null 值。但是,我需要包含空值和 null 值,所以到目前为止我所做的 -

@Introspected
@JsonInclude(ALWAYS)
public class FindVendorViewModel extends PaginationViewModel {
    private List<VendorViewModel> vendors;

    public List<VendorViewModel> getVendors() {
        return vendors;
    }

    public void setVendors(List<VendorViewModel> vendors) {
        this.vendors = vendors;
    }
}

分页模型

@Introspected
@JsonInclude(ALWAYS)
public class PaginationViewModel {
    int pageSize = 10;
    int total = 0;
    int currentPage = 0;
    int totalPage = 0;
    @Valid
    @LastIdRequired
    String lastId;
   
   // Getter and setter
}

当我添加 @JsonInclude(ALWAYS) 时,它不会在 JSON 响应中包含 NULLEMPTY 值,如下所示。

{
    "pageSize": 10,
    "total": 28,
    "currentPage": 0,
    "totalPage": 3
}

如果我添加以下代码,它会包含 lastIdvendorsNULLEMPTY

jackson:
  serializationInclusion: ALWAYS

{
    "pageSize": 10,
    "total": 0,
    "currentPage": 0,
    "totalPage": 0,
    "lastId": null,
    "vendors": []
}

但是,它会抛出如下异常

11:15:25.640 [default-nioEventLoopGroup-1-5] ERROR i.m.d.registration.AutoRegistration - Error occurred during service registration with Consul: Request decode failed: json: unknown field "ID"
io.micronaut.http.client.exceptions.HttpClientResponseException: Request decode failed: json: unknown field "ID"
    at io.micronaut.http.client.netty.DefaultHttpClient$12.channelRead0(DefaultHttpClient.java:2140)
    at io.micronaut.http.client.netty.DefaultHttpClient$12.channelRead0(DefaultHttpClient.java:2055)
    at io.netty.channel.SimpleChannelInboundHandler.channelRead(SimpleChannelInboundHandler.java:99)
    at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:379)
    at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:365)
    at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:357)
    at io.micronaut.http.netty.stream.HttpStreamsHandler.channelRead(HttpStreamsHandler.java:193)
    at io.micronaut.http.netty.stream.HttpStreamsClientHandler.channelRead(HttpStreamsClientHandler.java:183)
    at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:379)
    at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:365)
    at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:357)
    at io.netty.handler.codec.MessageToMessageDecoder.channelRead(MessageToMessageDecoder.java:103)
    at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:379)
    at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:365)
    at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:357)
    at io.netty.handler.codec.MessageToMessageDecoder.channelRead(MessageToMessageDecoder.java:103)

Controller

@Controller("/api/${api.version:v1}/vendor")
public class ApiGatewayVendorController implements IVendorOperation{
 @Override
    public Maybe<?> get(VendorSearchCriteria searchCriteria) {
        return this.iVendorClient.get(searchCriteria);
    }
}

最佳答案

我的问题是领事发现

consul:
  client:
    defaultZone: ${CONSUL_HOST:localhost}:${CONSUL_PORT:8500}
    registration:
      check:
        enabled: false
      enabled: true

添加以下代码是解决方法,但是,这是一个错误 https://github.com/micronaut-projects/micronaut-core/issues/3530

registration:
          check:
            enabled: false

关于java - 在 Micronaut 休息端点的 JSON 中包含 null 和空属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65769188/

相关文章:

micronaut - HttpClientResponseException : Empty body

kotlin - Micronaut - 在 Controller 中绑定(bind)获取参数对象

java - 在 Java 编译期间预计算纹理

java - 多人游戏的实现 - Jquery 应用程序级别?

java - Jackson解析Json错误,转换为java.time.LocalDateTime时发生InvalidDefinitionException

java - 在 Jackson 序列化和反序列化时保留类型信息

java - log4j2 扩展 Logger 类

java - JAVA自动检测Arduino COM端口(最好通过JSSC)

java - 将 JSON 映射到简单的 Java 子类

java - 实现 cli 应用程序的适当方法,该应用程序也使用 Micronaut 的服务配置文件