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

使用Spring RestTemplate时出现NullPointerException问题求助

解决Spring GET请求返回int类型时客户端NullPointerException的问题

嘿,作为Spring初学者遇到这个问题挺常见的,别着急!咱们一步步捋清楚:

首先,你说浏览器访问正常,但客户端调用就炸NPE,核心原因大概率是浏览器和客户端对返回数据的解析逻辑不一样:

浏览器访问时,Spring会把int直接以纯文本(text/plain)的形式返回,浏览器能直接显示数字;但客户端(比如RestTemplate、OkHttp这类工具)默认可能期望接收JSON格式的数据,而纯数字本身并不是有效的JSON(JSON要求是对象、数组或者带引号的字符串),导致客户端的JSON解析器无法正确处理,最终返回null,你后续使用这个null值的时候就触发了NPE。

再结合你的服务器代码,我猜你可能是直接返回int基本类型或者Integer包装类型,比如这两种写法:

// 写法1:直接返回int
@GetMapping("/regi")
public int getRegId() {
    return gameSession.getRegId();
}

// 写法2:返回Integer
@GetMapping("/regi")
public Integer getRegId() {
    return gameSession.getRegId();
}

针对这个问题,给你两个可行的解决方案:


方案1:把返回值包装成JSON对象推荐

客户端喜欢JSON格式的数据,咱们就把int包装成一个标准的JSON对象返回,这样不管是浏览器还是客户端都能完美解析:

方法一:用Map临时包装

@GetMapping("/regi")
public Map<String, Integer> getRegId() {
    Map<String, Integer> result = new HashMap<>();
    result.put("regId", gameSession.getRegId());
    return result;
}

方法二:自定义DTO更规范

如果后续有更多返回字段,建议定义一个专门的响应类:

// 定义响应DTO
public class RegIdResponse {
    private int regId;

    public RegIdResponse(int regId) {
        this.regId = regId;
    }

    // 必须加getter,否则JSON序列化会有问题
    public int getRegId() {
        return regId;
    }
}

// 控制器方法返回DTO
@GetMapping("/regi")
public RegIdResponse getRegId() {
    return new RegIdResponse(gameSession.getRegId());
}

这样服务器会返回类似{"regId": 123}的JSON,客户端用对应的类或者Map接收,就不会出现null了。


方案2:让客户端适配纯文本返回

如果不想改服务器代码,也可以调整客户端的请求配置,明确告诉服务器我要纯文本格式的数据:

比如用RestTemplate的话:

// 设置请求头,指定接收text/plain
HttpHeaders headers = new HttpHeaders();
headers.setAccept(Collections.singletonList(MediaType.TEXT_PLAIN));
HttpEntity<Void> requestEntity = new HttpEntity<>(headers);

// 发送请求,接收字符串然后转成int
ResponseEntity<String> response = restTemplate.exchange(
    "http://your-server-url/regi",
    HttpMethod.GET,
    requestEntity,
    String.class
);

int regId = Integer.parseInt(response.getBody());

这样客户端就能正确拿到数字,不会因为解析失败返回null了。


最后提醒一下:出现NPE的时候,最好先定位到客户端代码中具体哪一行抛出的异常,如果是接收到的返回值为null,那基本就是数据格式不匹配的问题啦!

内容的提问来源于stack exchange,提问作者Kevin de Wit

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 06:35:49