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

使用ARC插件/Angular5测试Spring Boot REST API POST请求遇问题求助

问题排查与解决方案

让我一步步帮你拆解并解决这两个问题:


一、ARC插件POST请求报400错误的原因及解决

错误原因分析

你收到的HttpMessageNotReadableException核心提示是:Can not deserialize instance of long out of START_OBJECT token,意思是Spring在解析请求体时,期望得到一个long类型的值,但实际收到的是一个JSON对象。这说明你的请求体JSON格式和后端DTO类的结构不匹配,导致Jackson无法完成序列化转换。

解决步骤

  1. 确认DTO类的正确性
    你的DTO类必须包含idPerson和idProject两个long类型的字段,并且要有对应的getter/setter方法(或者用Lombok的@Data注解简化),示例如下:

    public class DTO {
        private long idPerson;
        private long idProject;
    
        // 必须要有getter/setter,否则Jackson无法解析
        public long getIdPerson() {
            return idPerson;
        }
    
        public void setIdPerson(long idPerson) {
            this.idPerson = idPerson;
        }
    
        public long getIdProject() {
            return idProject;
        }
    
        public void setIdProject(long idProject) {
            this.idProject = idProject;
        }
    }
    
  2. 修正ARC插件的请求体格式
    在ARC中发送的请求体必须是扁平结构的JSON对象,不能嵌套,示例格式:

    {
        "idPerson": 1001,
        "idProject": 2002
    }
    
  3. 检查请求头设置
    确保ARC的请求头中Content-Type被设置为application/json,否则Spring无法识别请求体为JSON格式,会默认按表单参数解析,导致序列化失败。


二、Angular5 HttpClient调用无响应的问题排查

可能的原因及解决

  1. Observable未订阅,请求未触发
    Angular的HttpClient返回的是Observable对象,只有调用subscribe()方法后才会实际发送HTTP请求。如果你只调用了addProjToClient但没有订阅,请求根本不会执行。修正示例:

    // 在组件中调用服务方法时必须订阅
    this.yourService.addProjToClient(1001, 2002).subscribe(
        (response) => console.log("请求成功:", response),
        (error) => console.error("请求失败:", error)
    );
    
  2. 跨域(CORS)问题
    如果Angular前端和Spring Boot后端不在同一个域名/端口下,浏览器会触发跨域检测,先发OPTIONS预检请求。如果后端没有配置CORS,实际的POST请求会被拦截。
    解决方式:在Spring Boot后端添加CORS配置,比如在Controller类上添加@CrossOrigin注解,或者全局配置:

    @Configuration
    public class CorsConfig implements WebMvcConfigurer {
        @Override
        public void addCorsMappings(CorsRegistry registry) {
            registry.addMapping("/**")
                    .allowedOrigins("http://localhost:4200") // 替换为你的Angular前端地址
                    .allowedMethods("GET", "POST", "PUT", "DELETE")
                    .allowedHeaders("*")
                    .allowCredentials(true);
        }
    }
    
  3. Token格式错误
    大多数Spring Security的认证方案要求Authorization头格式为Bearer <token>,你的代码中直接拼接Token,可能缺少Bearer 前缀。修正Angular代码:

    return this.http.post(this.host+"/saveProjectToClient", 
        { idPerson, idProject }, 
        {
            headers: new HttpHeaders({
                'Authorization': 'Bearer ' + this.authService.getToken()
            })
        }
    )
    
  4. 请求URL错误
    打开浏览器开发者工具的「Network」标签,查看实际发送的请求URL是否正确,是否存在上下文路径遗漏(比如Spring Boot配置了server.servlet.context-path)、域名/端口错误等问题。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 09:47:38