配置请求头Content-Type

Content-Type有三种类型

// 1 默认的格式请求体中的数据会以json字符串的形式发送到后端
  'Content-Type: application/json '
// 2 请求体中的数据会以普通表单形式(键值对)发送到后端
  'Content-Type: application/x-www-form-urlencoded'
// 3 它会将请求体的数据处理为一条消息,以标签为单元,用分隔符分开。既可以上传键值对,也可以上传文件
  'Content-Type: multipart/form-data'
//4.纯文体的传输。空格转换为 “+” 加号,但不对特殊字符编码。
‘Content-Type':text/plain

我们可以这样配置请求头

axios({
    headers: {
        'Content-Type': 'application/x-www-form-urlencoded'
    },
    method: 'post',
    url: url,
    data: Qs.stringify(params)
})

或者是写到post的js文件

axios.js

axios.defaults.headers.post['Content-Type'] = "application/x-www-form-urlencoded"

对于不同的请求头,后端接口要用不同的注解吸收数据,否则会报404

multipart/form-data指定传输数据为二进制类型,比如图片、mp3、文件。

text/plain:纯文体的传输。空格转换为 “+” 加号,但不对特殊字符编码。

@RequestParam

1.均支持POST,GET请求
2.只支持Content-Type: 为 application/x-www-form-urlencoded编码的内容。Http协议中,如果不指定Content-Type,则默认传递的参数就是application/x-www-form-urlencoded类型)

@PostMapping
    public Result shopBtn(@RequestParam String token){
        System.out.println(token);
          return userShopService.checkShop(token);
    }

@RequestBody绑定一个对象实体

1.不支持get请求,因为get请求没有HttpEntity
2.必须要在请求头中申明content-Type(如application/json).springMvc通过HandlerAdapter配置的HttpMessageConverters解析httpEntity的数据,并绑定到相应的bean上
3.只能一个@RequestBody。
4.可以与@RequestParam一起使用,但建议最好不要与@RequestParam一起使用,是因为@RequestBody会将InputStream吃掉,造成后面的@RequsetParam无法匹配到参数而报400
 

 @PostMapping("/shopLogin")
    public Result shopLogin(@RequestBody User user){
        return userService.shopLogin(user);
    }

当你在发送HTTP请求时设置`Content-Type`头部,有时候可能会遇到错误,这通常是因为以下几个原因: 1. **拼写或格式错误**:检查`Content-Type`字段是否正确拼写,例如应该是`"application/json"`而不是`"application/json;"`。确保没有额外的空格或分号。 2. **无效的内容类型**:确保你正在使用的MIME类型对应于你的数据格式。比如,如果你传递的是JSON数据,应设置`Content-Type: application/json`,而非文本或其他非预期类型。 3. **跨域问题**:如果在浏览器环境中,可能存在同源策略限制。除非服务器允许,否则你无法直接向其他域名发送带有特定`Content-Type`的请求。 4. **HttpClient配置**:如果你使用的是`HttpClient`,可能需要显式配置它的`DefaultRequestHeaders.ContentType`属性。确保你是在适当的时间点设置,并且是在构建请求前进行。 5. **请求方法不匹配**:如果是POST、PUT等需要携带内容类型的请求,确保方法与内容类型相匹配。GET请求通常不需要指定`Content-Type`,因为它默认为`text/plain`. 一个正确的例子: ```csharp using HttpClientHandler = System.Net.Http.HttpClientHandler; // 如果你使用的是.Net Framework,请替换为HttpClientHandler using HttpResponseMessage = System.Net.Http.HttpResponseMessage; // 同上 HttpClient client = new HttpClient(new HttpClientHandler()); client.DefaultRequestHeaders.ContentType = MediaTypeHeaderValue.Parse("application/json"); // 这里设置Content-Type string jsonPayload = "{\"key\":\"value\"}"; var content = new StringContent(jsonPayload, Encoding.UTF8, "application/json"); try { HttpResponseMessage response = await client.PostAsync("https://api.example.com/endpoint", content); // ... } catch (HttpRequestException e) { Console.WriteLine($"Request failed with status code: {e.Response?.StatusCode}"); } ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值