springBoot + axios 做 put 请求。后台无法接受数据

发布于 2022-09-06 16:05:27 字数 1152 浏览 9 评论 0

1、问题描述:
后台使用 springBoot , 前端使用 vue 的 axios 做 put 请求,但是后台无法接受到数据。

    @PutMapping("/status/{id}")
    public Object updateProductionStatus(@PathVariable("id") String productionId, @RequestBody Integer status)

前端的 请求头:

clipboard.png

以 json 格式上传, spring 用 @RequestBody接受数据。 但是提示接收不到数据。

尝试使用 @ModelAttribute 接收。 但是 @ModelAttribute 需要使用一个对象去接受。 单纯的使用 基本数据类型, 他会抛

严重: Servlet.service() for servlet [dispatcherServlet] in context with path [] threw exception [Request processing failed; nested exception is org.springframework.beans.BeanInstantiationException: Failed to instantiate [java.lang.Integer]: No default constructor found; nested exception is java.lang.NoSuchMethodException: java.lang.Integer.<init>()] with root cause
java.lang.NoSuchMethodException: java.lang.Integer.<init>()

这个异常。

我将参数使用?status=xxx 的形式 上传是可以的, 但是问题是,我想把这个数据不写到URL 上面,想以 request payload 的形式 或者 以 Form data 的形式 上传, 我该怎么做

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

随遇而安 2022-09-13 16:05:27

一、使用Map接收,因为你的json对象是{status:1},这是一个键值对

    @PutMapping("/status/{id}")
    public Object updateProductionStatus(@PathVariable("id") String productionId, @RequestBody Map<String,Integer> status)

二、也可以让axios只发送1这样你就可以使用你原来的接口接收

@PutMapping("/status/{id}")
    public Object updateProductionStatus(@PathVariable("id") String productionId, @RequestBody Integer status)

二的具体例子如下

@RestController
public class MyTest {
    
    @PutMapping("/status/{id}")
    public Map getStatusValue(@PathVariable("id") String id, @RequestBody Integer status) {
        Map<String, Object> map = new HashMap<>();
        map.put("id", id);
        map.put("statusId", status);

        return map;
    }
}

clipboard.png

长发绾君心 2022-09-13 16:05:27

你试一下这个注解 @RequestParam

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文