You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Jersey+JAXB客户端发送布尔值至.NET API时true被转为false

问题分析

从日志输出能看到两个核心问题:

  • 请求的JSON字段名是"value",而非POJO定义的isValue,导致.NET服务端无法正确映射到对应属性,默认赋值为false
  • 布尔值被序列化为字符串类型"true",而非JSON原生布尔类型true,这也可能引发.NET模型绑定异常
解决方案

1. 修正JSON字段名匹配问题

JAXB默认会把getIsValue()/setIsValue()这类布尔属性的序列化字段名去掉is前缀,生成value。需要显式指定字段名,让它和.NET服务端的属性名一致:

修改GetBoolTest类的字段或setter方法,添加@XmlElement(name = "isValue")注解:

@XmlRootElement
public class GetBoolTest {
    @XmlElement(name = "isValue")
    protected Boolean isValue;

    // 构造方法、getter、setter 保持不变
}

或者在setter上添加注解:

@XmlElement(name = "isValue")
public void setIsValue(Boolean isValue) {
    this.isValue = isValue;
}

2. 修复布尔值序列化类型问题

Jersey默认的JAXB JSON处理会将Boolean类型序列化为字符串,改用Jackson作为JSON提供者可以解决这个问题,同时提升和.NET JSON的兼容性:

针对Jersey 1.x:

添加Jackson依赖(根据你的Jersey版本适配Jackson版本):

<dependency>
    <groupId>org.codehaus.jackson</groupId>
    <artifactId>jackson-jaxrs</artifactId>
    <version>1.9.13</version>
</dependency>

然后在客户端配置中注册Jackson的JSON提供者:

ClientConfig config = new DefaultClientConfig();
config.getClasses().add(org.codehaus.jackson.jaxrs.JacksonJsonProvider.class);
Client client = Client.create(config);

针对Jersey 2.x:

添加Jackson依赖:

<dependency>
    <groupId>com.fasterxml.jackson.jaxrs</groupId>
    <artifactId>jackson-jaxrs-json-provider</artifactId>
    <version>2.15.2</version>
</dependency>

注册Jackson提供者:

ClientConfig config = new ClientConfig();
config.register(com.fasterxml.jackson.jaxrs.json.JacksonJsonProvider.class);
Client client = ClientBuilder.newClient(config);

3. 修正Content-Type头的错误

代码中设置的Content-Type头多了一个多余的减号,修正为:

.header("Content-Type", "application/json; charset=UTF-8")
验证

修改后,请求的JSON会变为{"isValue":true},和Postman发送的格式一致,此时.NET服务端就能正确接收布尔值true,返回的响应也会对应正确结果。

内容的提问来源于stack exchange,提问作者Hooman Yarahmadi

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.24 00:47:50