当前位置: 首页 > 知识库问答 >
问题:

Java Spring REST API状态400 POST/PUT响应

东方旭东
2023-03-14

我使用JavaSpring Cloud/Boot构建了一个REST API服务。首先,我制作了一个连接到MongoDB的简单类和一个带有服务的控制器,它应该允许我添加、删除、更新和获取所有对象。当使用POSTMAN时,这些都可以工作,但是当我想使用redux添加或更新对象并获取API时,我会收到状态400和“错误请求”错误。这似乎与我在正文中发送的JSON有关,但它与例如POSTMAN使用的JSON格式完全相同。

我在Redux中的操作。为了简单/测试的目的,我在顶部添加了一个对象,而不是使用从页面发送的对象。

var assetObject = {
  "vendor" : "why dis no work?",
  "name": "wtf",
  "version": "231",
  "category" : "qsd",
  "technology" : "whatever"
}

export function addAsset(access_token, asset) {
  return dispatch => {
    fetch(constants.SERVER_ADDRESS + '/as/asset/add',
      {
        method: 'POST',
        credentials: 'include',
        headers: {
          'Authorization': 'Bearer' + access_token,
          'Content-Type': 'application/json'
        },
        body: assetObject
      })
      .then(res => dispatch({
        type: constants.ADD_ASSET,
        asset
      }))
  }
}

Java Spring中的控制器代码:

@RequestMapping(method = RequestMethod.POST, path = "/add")
public void addAsset(@RequestBody Asset asset) {
    assetService.addAsset(asset);
}

在“邮递员”中执行时状态正常:

使用Redux/Fetch API时出现的错误(我只删除了目录结构,因为其中包含公司名称):

已经坚持了一段时间,任何帮助都是非常感谢的!

编辑资产对象:

import org.springframework.data.annotation.Id;
import org.springframework.data.mongodb.core.mapping.Document;

@Document(collection = "assets")
public class Asset {

    @Id
    private String id;

    private String vendor;
    private String name;
    private String version;
    private String category;
    private String technology;

    public Asset() {
    }

    public Asset(String id,
                 String vendor,
                 String name,
                 String version,
                 String category,
                 String technology) {
        this.id = id;
        this.vendor = vendor;
        this.name = name;
        this.version = version;
        this.category = category;
        this.technology = technology;
    }

    public String getId() {
        return id;
    }

    public String getVendor() {
        return vendor;
    }

    public String getName() {
        return name;
    }

    public String getVersion() {
        return version;
    }

    public String getCategory() {
        return category;
    }

    public String getTechnology() {
        return technology;
    }

    public void setId(String id) {
        this.id = id;
    }

    public void setVendor(String vendor) {
        this.vendor = vendor;
    }

    public void setName(String name) {
        this.name = name;
    }

    public void setVersion(String version) {
        this.version = version;
    }

    public void setCategory(String category) {
        this.category = category;
    }

    public void setTechnology(String technology) {
        this.technology = technology;
    }
}

共有1个答案

颛孙正谊
2023-03-14

您的错误消息显示:

; 缺少必需的请求正文

我认为,当您的控制器方法试图从传入请求中形成对象时,就会发生错误。

发送请求时,必须设置与对象相关的每个字段。如果您计划不设置属性,则应使用注释标记该字段。

您可以对变量使用注释,该变量在形成对象以及输出对象时将忽略此属性。

在setter方法上使用@JsonIgnore注释,我认为您现在应该这样做,因为在发出请求时忽略了id属性。

@JsonIgnore 
public void setId(String id) {
        this.id = id;
}

您可以从控制器方法返回httpstatus代码,这样客户端就知道请求成功了

@ResponseBody 
public ResponseEntity<String> addAsset(@RequestBody Asset asset) {
return new ResponseEntity<String>("your response here", HttpStatus.OK);
}

 类似资料:
  • 问题内容: 我有一个API调用,我需要对其进行一些检查并可能返回各种状态代码。我不需要自定义视图或任何东西,我只需要返回正确的代码。如果用户未通过适当的凭据,则需要返回401状态。如果他们尚未发送受支持的请求格式,则需要返回400状态。 因为它是一个API,所以我真正想做的就是设置响应状态并以一条简单的愚蠢消息退出,该消息说明请求失败的原因(可能使用)。刚好足以完成工作,但我还无法使其正常工作。我

  • 我用的是和Gradle的协议。是否可以从状态更改URL捕获响应?例如,我正在向数据库中添加一条新记录。提供程序创建一个唯一的id,该id必须用于该记录的其他操作。

  • HTTP响应消息的响应状态行分为三部分:HTTP版本、状态码和状态信息,如下所示: HTTP/1.1 200 OK 其中HTTP版本可以是HTTP/1.1或HTTP/1.0,这由Web服务器所支持的HTTP版本决定。状态信息的内容和状态相关,如404状态码所对应的HTTP1.1规范中的状态信息是Not Found。由于HTTP版本一般是基本固定的,而状态信息是随着状态码的变化而变的。因此,在HTT

  • 我有以下控制器: 13-feb-2016 16:55:09.442警告[http-apr-8080-exec-9]org.springframework.web.servlet.PageNotFound.HandleHttpRequestMethodNotSupported请求方法“Put”不受支持 我不明白这怎么可能。下面是我的依赖项: 编辑2: 2016-02-14 12:30:56 DEBU

  • company.js CompanyController.java 请告诉我为什么不执行成功块。

  • 我试图将spring securtiy saml集成作为一个SP与adfs系统实现,我的头撞了好几天,在成功验证后,当SAMLResponnse从adfs发回时,会发生这种异常,并引发以下异常。这是调试日志: 我一直在讨论一些问题,所以: 组织。opensaml。常见的SAMLException:Response的状态代码urn:oasis:names:tc:SAML:2.0:status:Res