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

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 的形式 上传, 我该怎么做

阅读 10.2k
2 个回答

一、使用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

你试一下这个注解 @RequestParam

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题
宣传栏