使用 swagger-spring-JAVA 时,@pathVariable 中的重音字符未正确解码
Accented characters in a @pathVariable not correctly decoded when using swagger-spring-JAVA
我正在使用 swaggerUI 调试我的 Spring 应用程序。在我的配置中 class 我有:
@Configuration
@EnableCaching
@EnableScheduling
@PropertySource({ ...})
public class AppConfig{
....
@Bean
public FilterRegistrationBean filterRegistrationBean() {
CharacterEncodingFilter filter = new CharacterEncodingFilter();
filter.setEncoding("UTF-8");
filter.setForceEncoding(true);
FilterRegistrationBean registrationBean = new FilterRegistrationBean();
registrationBean.setFilter(filter);
registrationBean.addUrlPatterns("/*");
return registrationBean;
}
...
}
在我的控制器中我有:
public MyreturnedObject myMethod(@ApiParam(value = "myPathParam code of user that needs to fetch the returnedObjects", required = true) @PathVariable final String myPathParam{
...
}
当我使用带参数值 ex 的 swaggerUI 时:XXÉXX 我在请求中进入 swaggerUI URL:
https://localhost/myApi/XX%C3%89XX/returnedObjects?...
在我看来,这似乎以 UTF-8 正确解码。
在我的调试器中(我正在使用 RAD 和 websphere)我得到:XXÃXX,这是错误的值。
任何人都可以帮助查明我做错了什么并告诉我如何解决这个问题吗?
编辑
我注意到 swaggerUI 中 REQUEST URL 中的代码 for É = C3 89 in UTF 但这两个部分以某种方式被解码为 Ã + 一个空字符,就好像它被解码为UNICODE,其中 C3= Ã 和 89 = nothing 如此 link.
所示
我找到了一个可以帮助我解决问题的解决方法。
在我的控制器调用的服务中,我创建了一个方法如下
public String myServiceMethod (String myPathParameter) {
String encodedUTF8 = null;
try{
byte[] utf8 = myPathParameter.getBytes("ISO-8859-1");
encodedUTF8 = new String(utf8, "UTF8");
return encodedUTF8;
}
catch(java.io.UnsupportedEncodingException e){
// logger that states that the encoding went wrong
}
}
正如我所说,这只是一种解决方法,所以如果有更好的答案(一些 spring 设置允许我以干净的方式执行此操作),我将非常感激。
我正在使用 swaggerUI 调试我的 Spring 应用程序。在我的配置中 class 我有:
@Configuration
@EnableCaching
@EnableScheduling
@PropertySource({ ...})
public class AppConfig{
....
@Bean
public FilterRegistrationBean filterRegistrationBean() {
CharacterEncodingFilter filter = new CharacterEncodingFilter();
filter.setEncoding("UTF-8");
filter.setForceEncoding(true);
FilterRegistrationBean registrationBean = new FilterRegistrationBean();
registrationBean.setFilter(filter);
registrationBean.addUrlPatterns("/*");
return registrationBean;
}
...
}
在我的控制器中我有:
public MyreturnedObject myMethod(@ApiParam(value = "myPathParam code of user that needs to fetch the returnedObjects", required = true) @PathVariable final String myPathParam{
...
}
当我使用带参数值 ex 的 swaggerUI 时:XXÉXX 我在请求中进入 swaggerUI URL:
https://localhost/myApi/XX%C3%89XX/returnedObjects?...
在我看来,这似乎以 UTF-8 正确解码。 在我的调试器中(我正在使用 RAD 和 websphere)我得到:XXÃXX,这是错误的值。 任何人都可以帮助查明我做错了什么并告诉我如何解决这个问题吗?
编辑
我注意到 swaggerUI 中 REQUEST URL 中的代码 for É = C3 89 in UTF 但这两个部分以某种方式被解码为 Ã + 一个空字符,就好像它被解码为UNICODE,其中 C3= Ã 和 89 = nothing 如此 link.
所示我找到了一个可以帮助我解决问题的解决方法。 在我的控制器调用的服务中,我创建了一个方法如下
public String myServiceMethod (String myPathParameter) {
String encodedUTF8 = null;
try{
byte[] utf8 = myPathParameter.getBytes("ISO-8859-1");
encodedUTF8 = new String(utf8, "UTF8");
return encodedUTF8;
}
catch(java.io.UnsupportedEncodingException e){
// logger that states that the encoding went wrong
}
}
正如我所说,这只是一种解决方法,所以如果有更好的答案(一些 spring 设置允许我以干净的方式执行此操作),我将非常感激。