使用swagger-spring-JAVA时,@ pathVariable中的重音字符未正确解码

时间:2017-12-19 14:33:49

标签: java spring swagger-ui

我正在使用swaggerUI对我的Spring应用程序进行debbuging。在我的配置类中,我有:

@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:XXÉXX的swaggerUI时,我会在请求网址中获取swaggerUI:

https://localhost/myApi/XX%C3%89XX/returnedObjects?...

对我来说,似乎在UTF-8中正确解码。 在我的调试器中(我正在使用RAD和websphere),我得到:XXÃXX,这是错误的值。 任何人都可以帮助确定我做错了什么并告诉我如何解决这个问题?

修改

我注意到,swaggerUI中的REQUEST URL中的代码为É= C3 89,但是这两个部分以某种方式被解码为Ã+一个空字符,好像它是在UNICODE中解码的,其中C3 =Ã和89 =此link中没有显示任何内容。

1 个答案:

答案 0 :(得分:0)

我找到了一个帮助我解决问题的解决方法。 在我的控制器调用的服务中,我创建了一个方法如下

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
       }
}

正如我所说,这只是一种解决方法,所以如果有更好的答案(一些弹簧设置允许我以干净的方式做到这一点),我将非常感激。