2017-12-19 19 views
1

SpringアプリケーションのデバッグにswaggerUIを使用しています。私の設定のクラスでは、私が持っている:私のコントローラでswagger-spring-JAVAを使用すると、@pathVariableが正しくデコードされません。JAVA

@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{ 
... 
} 

私は、パラメータ値の元とswaggerUIを使用する場合:私は、リクエストURLにswaggerUIで取得XXÉXX

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

私にはUTF-8で正しくデコードされたようです。 私のデバッガ(私はRADとwebsphereを使用しています)では、XXÃXXが間違っています。 誰かが私が間違っていることを突き止める手助けをして、この問題の解決方法を教えてもらえますか?私が気づいた何

EDIT

はそれがあったかのようにUTFでÉ= C3 89のためのswaggerUI内の要求URL内のコードが、これらの2つの部分は何らかの形で、A +空の文字としてデコードされていることですUNICODEでデコードされます。ここでC3 =Ãとなり、893 =このlinkには何も表示されません。

答えて

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

に従うように私のコントローラによって呼び出されるサービスで は、私は方法を作成している場合ので、そこに私はでこれを行うことができ、より良い答え(いくつかの春のセットアップクリーンな方法)、私は本当にそれを感謝します。

関連する問題