如何修复 URLEncoder 相关问题?

问题描述 投票:0回答:1

我的网址编码器有问题,它可以在本地和舞台上工作,但不能在现场工作。 我正在使用过滤器来获取品牌名称,但其中一些品牌名称带有空格。当我实时发送请求时,它返回 500 错误。

java.net.URISyntaxException:索引 236 处的查询中存在非法字符:http://gateway-service/deal-solution-service/api/deals?categories=false&phonesAndSim=false<eAndSim=false&tabletsAndLaptops=false&connectivity=false&priceMin=0&priceMax=50000&duration36=false&duration24 =假&品牌=华为Spa

本来就是要照顾这个“华为温泉”的

我的服务Impl

    @Override
    public Collection<String> getDistinctBrands(Filter1 productFilter) {
        List<String> distinctBrands = new ArrayList<>();

        if (productFilter != null && productFilter.getBrand() != null && !productFilter.getBrand().isEmpty()) {
            String encodedBrand = URLEncoder.encode(productFilter.getBrand(), StandardCharsets.UTF_8);
            distinctBrands.addAll(Arrays.asList(encodedBrand.split("[^a-zA-Z0-9\\-_']+")));
        } else {
            distinctBrands = dealRepository.findDistinctBrands();
        }
        return distinctBrands;
    } 

我的控制器

    @Override
    public ResponseEntity<List<String>> getDistinctBrands(Filter1 filter) {
        Collection<String> distinctBrands = dealService.getDistinctBrands(filter);
        if (!distinctBrands.isEmpty()) {
            List<String> decodedBrands = new ArrayList<>();
            for (String brand : distinctBrands) {
                decodedBrands.add(URLDecoder.decode(brand, StandardCharsets.UTF_8));
            }
            return ResponseEntity.ok(decodedBrands);
        } else {
            return ResponseEntity.notFound().build();
        }
    }

我在使用过滤器时遇到问题(按品牌名称和空格进行过滤),然后我添加了一个 URL 编码器,它开始在本地和临时环境中工作,但在实时环境中仍然无法工作。

如果我的品牌名称包含空格,我想对我的 URL 进行编码以填充空格。

java angular development-environment urlencode production-environment
1个回答
0
投票

根据描述和片段,您的 url 编码方法似乎或多或少是正确的。您看到的错误表明空白编码存在问题。

当您编码“Huawei Spa”等字符串时,空格应替换为“+”或“%20”。 您可以在here对其进行编码并在您的环境中进行测试。

它在本地运行而不是在生产环境中运行的事实可能表明在这些环境中 URL 的解释方式存在差异。客户端和应用程序之间的所有内容,包括服务器、反向代理和其他配置都可能导致此类行为。

有关 URLEncoder 参考,请查看官方 文档

© www.soinside.com 2019 - 2024. All rights reserved.