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

Angular Post请求体被Spring API接收时为null的问题排查

问题原因及解决方案

你的问题出在Angular的HttpClient.post调用方式错误,导致请求体没有正确发送到Spring后端。

错误点分析

  • post方法参数顺序错误:HttpClient.post的第二个参数是请求体数据,第三个参数才是包含headers、params等的配置对象。你当前把请求体写成{params: data, headers: headers},这会让Angular把这个对象作为请求体发送,而非你定义的data对象,Spring自然无法解析到正确参数。
  • 多余的HttpParams操作:你创建params并将data转成字符串作为请求参数,但Spring接口用@RequestBody接收请求体而非URL参数,这部分代码完全无效。

修正后的Angular服务代码

import { Injectable } from '@angular/core';
import {HttpClient} from "@angular/common/http";

@Injectable({
  providedIn: 'root'
})
export class TftCalculatorService {
  apiUrl = 'http://localhost:8080'
  constructor(private http: HttpClient) { }

  calculateChanceOfHitting(){
    const data = {
      "name":"Mordekaiser",
      "targetCount":3,
      "currentUnits":0,
      "sameUnitOnOtherBoards":0,
      "currentLevel":8,
      "currentGold": 130,
      "prismaticTicket": false
    };
    // 正确的post调用:第二个参数是请求体data,第三个是配置对象(可选)
    return this.http.post<any>(`${this.apiUrl}/calculateChanceOfHitting`, data);
  }
}

额外说明

  • Angular的HttpClient默认会把JavaScript对象序列化为JSON,并且自动设置Content-Type: application/json,所以手动设置headers的代码可以省略。
  • 确认Spring端CalculatorParams实体类的字段名称和JSON键完全匹配(大小写一致),比如prismaticTicket对应Java类的isPrismaticTicket()方法,Jackson序列化默认兼容这种命名,但字段名不匹配会导致解析失败。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.15 03:02:16