如何处理 URL(Spring、REST、CXF)中的转义字符(管道 |)?

Posted

技术标签:

【中文标题】如何处理 URL(Spring、REST、CXF)中的转义字符(管道 |)?【英文标题】:How to handle escape characters (pipe |) in URL (Spring, REST, CXF)? 【发布时间】:2014-03-23 08:17:00 【问题描述】:

我正在使用 Spring、CXF、Tomcat 来开发 Web 服务。

在 URL 中发送竖线 (|) 等字符时遇到问题?

例如: http://localhost:9080/address/v1/countries/\|

抛出 500 错误,有没有办法处理它并抛出自定义错误代码,如 404 甚至 400?

我尝试在 tomcat 的 server.xml 中的连接器对象上设置 URIEncoding="UTF-8"。但它并没有解决它。

我还尝试在我的应用程序的 web.xml 中添加过滤器映射,如下所示:-

<filter>
    <filter-name>encodingFilter</filter-name>
    <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
    <init-param>
        <param-name>encoding</param-name>
        <param-value>UTF-8</param-value>
    </init-param>
    <init-param>
        <param-name>forceEncoding</param-name>
        <param-value>true</param-value>
    </init-param>
</filter>
<filter-mapping>
    <filter-name>encodingFilter</filter-name>
    <url-pattern>/*</url-pattern>
</filter-mapping>

有人能指出这些 URI 以何种方式返回自定义错误代码和消息吗?

【问题讨论】:

似乎下面的链接是一个相关线程***.com/questions/7176726/… 【参考方案1】:

url 编码请参考here。假设你想发送 Sachin|Tendulkar。您可以发送为 Sachin%7CTendulkar。

【讨论】:

【参考方案2】:

是的。 %7C 是需要在 URL 中使用的 PIPE 字符。 以下是我成功使用的另一个示例。在此邻域中,名称为“ROOT|RESTFUL”,表示为 ROOT%7CRESTFUL

http://localhost:8080/BAE_4_3_API/rest/v1/user/rahul1/neighborhood/ROOT%7CRESTFUL/collaboration/1000/whiteboard

【讨论】:

以上是关于如何处理 URL(Spring、REST、CXF)中的转义字符(管道 |)?的主要内容,如果未能解决你的问题,请参考以下文章

Spring Data REST CORS - 如何处理预检选项请求?

如何处理 django-rest-framework 中 url 模式中的外键关系

如何处理 Spring Rest Web 服务中的 JSON 解析错误

如何处理 grails spring-security-rest 插件中的自定义身份验证异常?

如何处理 Spring Rest API 上的内部服务器错误(500)以自定义消息?

如何处理 Spring Boot Rest 和 Jackson Deserializer 的 Javax 验证中的无效数字