post请求springMVC后台,只传一个参数,后台用一个字符串接受,参数名对应,但入参却为null,求讲解和解决,谢谢

如果在参数前面加上@requestBody 接受的就是个json串

前台代码:

shuoAdd() {
    axios.post('/shuo/add', {
            content: this.shuo //瞎打的内容是:法撒旦发射点
        }
    ).then(function (response) {
        console.log(response.data)
        // window.history.back(-1)
    })
}

前台请求数据:
{"content":"法撒旦发射点"}

后台代码---1:

@RestController
@RequestMapping("shuo")
public class ShuoControllerPost {
    @PostMapping("add")
    public String add(String content) {
        System.out.println(content);
        return "保存成功";
    }
}

后台这样写的话接收到的是null;

后台代码---2 加上@RequestBody注解:

@RestController
@RequestMapping("shuo")
public class ShuoControllerPost {
    @PostMapping("add")
    public String add(@RequestBody String content) {
        System.out.println(content);
        return "保存成功";
    }
}

这样写的话打印content就是 {"content":"法撒旦发射点"} 一个json串

我就只想接收到 法撒旦发射点 这个字符串就行

谢谢各位

阅读 16.1k
9 个回答

最简单的方法就是自定义一个实体,然后对象名是content,直接取值就行了。

使用浏览器开发者工具看一下,Content-Type和form Data是什么?

没有使用过axios,单纯的从ajax请求的角度来回答一下这个问题。

现在看来你是能访问到这个方法的,说明URL是正确的。那么:
1.是否和请求的content-type有关?
2.是否需要使用JSON.stringfy方法?

这里你上传的数据类型是form的话,可以试试看将注解改为@RequestParam
如果上传的数据格式为json的话,需要适当的配置消息头的属性

https://my.oschina.net/anxiao...
不知道这篇文章是不是你需要的。

你看看是不是this的问题。Ajax中的this不是外部函数的this。

关于axios的这个问题网上有很多讲解,因为它并没有默认的替你去处理数据。你可以看network控制面板发送的请求,过去的并不是一个key:value的形式。可以通过自己处理如$.param

jQuery的ajax为什么有?那是因为jQuery本来的目的就是为了方便的一个库。

axios默认是payload方式提交数据,需要按照以下步骤修改就可以了:
1.加入配置:axios.defaults.headers.post['Content-Type'] = 'application/x-www-form-urlencoded'
2.引入:import Qs from 'qs'
3.post请求中,需要将数据序列化:data: Qs.stringify(params)

新手上路,请多包涵

axios默认是payload方式提交数据,springmvc需要一个对象注入。

@RequestMapping("shuo")
public class ShuoControllerPost {
    @PostMapping("add")
    public String add(@RequestBody QueryData data) {
        System.out.println(data.getContent());
        return "保存成功";
    }
}
//封装对象
public class QueryData {
    private String content;

    public String getContent() {
        return content;
    }

    public void setContent(String content) {
        this.content = content;
    }
}

设置请求头 content-type为application/x-www-form-urlencoded
headers: {

   'Content-Type': 'application/x-www-form-urlencoded'

}
var params = {
content: this.shuo
}
把你传递值转换为字符串 JSON.stringify(params)

axios.post('url',JSON.stringify(params),{
      headers: {
            'Content-Type': 'application/x-www-form-urlencoded'
       }
  })
    .then(function(res){
              
     }.bind(this))
     .catch(function(err){
      console.log(err)
  })
新手上路,请多包涵
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题