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

Spring WebClient传递Domain对象POST请求失败,传JSON字符串正常

问题排查与解决方案

你的问题核心是Jackson序列化的字段命名不匹配,以及领域类缺少必要的访问方法,导致自定义对象无法被正确序列化为接口预期的JSON格式。

问题根源

你手动构造的JSON中字段名是首字母大写的Login、Password、Domain,但默认情况下Jackson序列化Java对象时,会将类字段转为小驼峰格式(比如login),导致接口接收的字段名与预期不符;同时你的Login类只有私有字段,没有提供getter/setter方法,Jackson无法读取和序列化字段值。

解决方案

方案1:使用@JsonProperty指定序列化字段名(推荐)

通过注解精准控制每个字段序列化后的JSON名称,同时补充getter/setter方法:

import com.fasterxml.jackson.annotation.JsonProperty;

public class Login {
    @JsonProperty("Login")
    private String Login;
    @JsonProperty("Password")
    private String Password;
    @JsonProperty("Domain")
    private String Domain;

    // 必须添加getter和setter方法,供Jackson访问字段
    public String getLogin() {
        return Login;
    }

    public void setLogin(String login) {
        Login = login;
    }

    public String getPassword() {
        return Password;
    }

    public void setPassword(String password) {
        Password = password;
    }

    public String getDomain() {
        return Domain;
    }

    public void setDomain(String domain) {
        Domain = domain;
    }
}

方案2:全局配置Jackson命名策略(不推荐,影响全局接口)

如果所有接口都要求首字母大写的字段名,可以在WebClient配置中修改Jackson的命名策略:

import com.fasterxml.jackson.databind.PropertyNamingStrategy;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.http.codec.json.Jackson2JsonDecoder;
import org.springframework.http.codec.json.Jackson2JsonEncoder;
import org.springframework.web.reactive.function.client.ExchangeStrategies;
import org.springframework.web.reactive.function.client.WebClient;

@Configuration
public class WebClientConfig {
    @Bean
    public WebClient webClient() {
        ExchangeStrategies strategies = ExchangeStrategies.builder()
                .codecs(configurer -> {
                    configurer.defaultCodecs().jackson2JsonEncoder(new Jackson2JsonEncoder(
                            Jackson2JsonEncoder.defaultObjectMapper()
                                    .setPropertyNamingStrategy(PropertyNamingStrategy.UPPER_CAMEL_CASE)));
                    configurer.defaultCodecs().jackson2JsonDecoder(new Jackson2JsonDecoder(
                            Jackson2JsonDecoder.defaultObjectMapper()
                                    .setPropertyNamingStrategy(PropertyNamingStrategy.UPPER_CAMEL_CASE)));
                })
                .build();

        return WebClient.builder()
                .exchangeStrategies(strategies)
                .build();
    }
}

优化WebClient调用代码

使用更简洁的bodyValue方法替代body(Mono.just(...)):

String resp = webClient
        .post()
        .uri("https://sssss.com")
        .contentType(MediaType.APPLICATION_JSON)
        .accept(MediaType.APPLICATION_JSON)
        .bodyValue(login)
        .retrieve()
        .bodyToMono(String.class)
        .block();

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.19 15:55:22