Springboot请求的URL中含有‘:‘、‘/‘等转义字符导致404错误问题

本文讲述了在Springboot应用中遇到请求URL包含':', '/', '%3A', '%2F'等特殊字符导致404错误的问题。尝试了通过设置系统参数和修改Tomcat Connector属性的方法解决问题,但未成功。最终通过配置UrlPathHelper的alwaysUseFullPath属性成功解决了含有复杂转义字符组合导致的404错误。" 116012905,10547750,Matlab实现PID控制器详细步骤,"['MATLAB仿真', '控制系统', 'PID调节']

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

本来在上一次解决“Springboot用@PathVariable传参,最后一个参数小数点(.)后面数据丢失问题”时,花费了一些时间,解决了问题。但是没想到此次项目中的请求URL含有的不仅仅是一个小数点这么简单的,更多的是各种特殊字符的混搭。

例如下面的一个请求:(delete方式)

http://localhost:8088/backend/api/v2/users/123@gmail.com/element
/http%3A%2F%2Ftext-add%3A8090%2Foperation%2Ftext.add

请求有点长,编码前的请求是:

http://localhost:8088/backend/api/v2/users/123@gmail.com/element
/http://text-add:8090/operation/text.add

经过前端的处理变成上面编码后的请求:(前端如下)

del(elementUri) {
        return this.$http({
            method: 'DELETE',
            url: this.urlBase() + "/element/" + encodeURIComponent(elementUri)
        })
    }

将浏览器中的请求导入到postman中,进行调试,请求结果报错404


                
当你在Spring Boot应用中发送POST请求,并携带JSON字符串参数,如果接收到的数据中全是问号(通常是由于JSON数据未被正确解析),可能是由于字符编码问题、参数序列化问题或者是HTTP头部Content-Type设置不正确。这里有几个解决步骤: 1. **检查Content-Type**:确保`application/json`作为`Content-Type`发送到服务器,Spring Boot默认可以处理这个类型,但如果设置错误可能会导致问题。可以在客户端代码里添加如下的头信息: ```java HttpHeaders headers = new HttpHeaders(); headers.setContentType(MediaType.APPLICATION_JSON); HttpEntity<String> entity = new HttpEntity<>(yourJsonString, headers); RestTemplate restTemplate = new RestTemplate(); ResponseEntity<String> response = restTemplate.postForEntity(url, entity, String.class); ``` 2. **正确编码JSON字符串**:如果你直接从用户输入获取JSON字符串,确保它已经正确地进行了UTF-8或者其他合适的编码转换。例如,在Java中,可以这样做: ```java String jsonString = URLEncoder.encode(yourJsonString, "UTF-8"); ``` 3. **检查服务器端接收**:在Spring Boot后端,检查是否正确地配置了`MessageConverter`来解析JSON。例如,如果你使用的是Jackson,确保在`WebMvcConfigurer`中启用了它: ```java @Override public void configureMessageConverters(List<HttpMessageConverter<?>> converters) { converters.add(new MappingJackson2HttpMessageConverter()); } ``` 4. **异常处理**:检查是否有任何异常没有被捕获并记录日志,这有助于定位问题所在。 如果以上步骤都已检查,但仍存在问题,可能需要查看网络请求的具体报文,确认数据是否完整无误地传输。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值