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

Java+GraphQL场景下如何生成短横线命名键的预期JSON响应

Java+GraphQL场景下如何生成短横线命名键的预期JSON响应

看起来你现在的问题是Java模型和GraphQL定义用的是驼峰命名,但调用外部API时需要输出短横线分隔(kebab-case)的JSON键名对吧?别担心,咱们可以通过调整JSON序列化规则来搞定这个问题,下面分步骤给你说:

1. 给Java模型添加JSON序列化注解

最直接的方式是在你的SampleRequest类的字段上,用Jackson的@JsonProperty注解指定对应的JSON键名。这样既不影响GraphQL层的驼峰参数接收,又能在序列化时输出短横线格式的键。

修改后的模型代码如下:

@Data
@Getter
@Setter
public class SampleRequest{
  @JsonProperty("sample-event")
  private String sampleEvent;
  
  @JsonProperty("sample-id")
  private String sampleId;
}

解释一下:@JsonProperty注解会告诉Jackson,当把这个对象序列化成JSON时,把sampleEvent字段映射为sample-event,sampleId映射为sample-id,完美匹配你要的预期JSON格式。

2. 确保RestTemplate使用正确的ObjectMapper

如果你的项目里自定义了RestTemplate的ObjectMapper,要确保它没有覆盖掉注解的配置。不过一般来说,Spring默认的ObjectMapper会自动识别@JsonProperty注解,所以只要你加了上面的注解,RestTemplate在发送请求时,就会生成符合要求的JSON payload了。

3. 全局配置(可选)

如果你有很多类都需要转成kebab-case格式,也可以全局配置Jackson的命名策略,这样就不用每个字段都加注解了。比如在Spring Boot项目里,你可以在application.properties里加:

spring.jackson.property-naming-strategy=KEBAB_CASE

或者在配置类里自定义ObjectMapper:

@Bean
public ObjectMapper objectMapper() {
    ObjectMapper mapper = new ObjectMapper();
    mapper.setPropertyNamingStrategy(PropertyNamingStrategy.KEBAB_CASE);
    return mapper;
}

注意:全局配置会影响所有Java对象的JSON序列化,如果你只有个别类需要这种格式,还是用注解的方式更灵活。

这样调整之后,你的SendPayload方法发送的JSON就会变成预期的sample-event和sample-id键名啦。

备注:内容来源于stack exchange,提问作者Divya Muruganantham

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.14 09:25:27