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

无WSDL且需用户名密码验证的Web Service如何在Java中调用

问题解决方案

1 补充Maven依赖

首先在pom.xml中添加Jackson JSON处理依赖,你提到的APOD不需要额外引入依赖,是需要自行定义的、和接口返回字段匹配的实体类:

<dependencies>
    <!-- Jackson JSON序列化/反序列化依赖 -->
    <dependency>
        <groupId>com.fasterxml.jackson.core</groupId>
        <artifactId>jackson-databind</artifactId>
        <version>2.15.2</version>
        <!-- 可替换为和你项目JDK版本适配的最新稳定版 -->
    </dependency>
</dependencies>

2 补全身份验证逻辑

你现有代码没有添加用户名密码的认证逻辑,这类无WSDL的HTTP接口通常使用Basic Auth认证,需要将用户名:密码格式的字符串做Base64编码后放入请求头。

3 完整可运行代码示例

import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.URL;
import java.nio.charset.StandardCharsets;
import java.util.Base64;
import com.fasterxml.jackson.databind.ObjectMapper;

public class ServiceCallTest {
    public static void main(String[] args) throws Exception {
        // 替换为实际的服务地址、用户名、密码
        String targetUrl = "你的Postman中调用的实际URL";
        String username = "你获取到的用户名";
        String password = "你获取到的密码";

        URL url = new URL(targetUrl);
        HttpURLConnection connection = (HttpURLConnection) url.openConnection();

        // 配置Basic Auth认证头
        String authStr = username + ":" + password;
        String encodedAuth = Base64.getEncoder()
                .encodeToString(authStr.getBytes(StandardCharsets.UTF_8));
        connection.setRequestProperty("Authorization", "Basic " + encodedAuth);

        // 按需修改请求方法,默认GET,POST请求需额外配置请求体
        connection.setRequestMethod("GET");
        // 发起请求获取返回流
        try (InputStream responseStream = connection.getInputStream()) {
            ObjectMapper objectMapper = new ObjectMapper();
            APOD apod = objectMapper.readValue(responseStream, APOD.class);
            System.out.println(apod.title);
        } finally {
            connection.disconnect();
        }
    }
}

// 自定义APOD实体类,字段名、类型需和接口返回的JSON字段完全匹配
class APOD {
    public String title;
    // 此处补充接口返回的其他所有对应字段,也可以给字段添加get/set方法
}

4 异常排查

  • 若返回401状态码:检查用户名密码是否正确,是否有特殊字符需要转义
  • 若返回405状态码:检查请求方法是否和接口要求一致,GET/POST不要填错
  • 若JSON解析报错:检查APOD实体类的字段和接口返回是否匹配,不匹配的字段可以加@JsonProperty("实际字段名")注解做映射
  • 若为POST请求:需要额外添加connection.setDoOutput(true),并将请求参数写入连接的输出流中

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 23:30:04