2016-11-02 14 views
1

私は、パラメータとしてURLエンコードされた文字列を取り、通常のスプリング@Controllerを持っている:一貫性のない自動デコード

@RequestMapping(value = "/wechat/browser", method = GET) 
public void askWeChatWhoTheUserIs(@RequestParam(name = "origin") String origin, 
            HttpServletResponse response) throws IOException { 
    //omitted codes 
} 

私は春のブートアプリケーションをデバッグし、ブラウザでエンドポイントをテストする場合:

私はSpring MVCのテストを書いたとき
curl http://localhost:8080/wechat/browser\?origin\=http%3A%2F%2Fwww.example.com%2Findex.html%3Fa%3Db%23%2Froute 

originは自動的に復号化され、http://www.example.com/index.html?a=b#/route

に等しい。しかししまった:

@RunWith(SpringRunner.class) 
@WebMvcTest(WeChatOauthController.class) 
public class WeChatOauthControllerTest { 

    @Autowired 
    private MockMvc mvc; 

    @Test 
    public void itShouldRedirectToWeChatToFinishOauthProtocol() throws Exception { 

     String origin = "http://www.example.com/index.html?a=b#/route"; 
     String encodedOrigin = URLEncoder.encode(origin, "UTF-8"); 

     this.mvc.perform(get("/wechat/browser") 
      .param("origin", encodedOrigin)) 
      .andDo(print()) 
     //omitted codes 
    } 
} 

このテストとコントローラをデバッグすると、今回はoriginがデコードされませんでした。なぜこれらの2つのケースで異なった動作をするのか不思議です。

+0

_いない他の一つに、サーバーを持っている一つのケースでは_「それはこれらの2つのケースで異なる動作をする理由だけで不思議」:つまり

は、これを使用しています。あるケースでは完全に設定されたアプリケーションがあり、もう1つのアプリケーションではそうではありません。おそらく、あなたのテストにもURLデコードを設定する必要があります。 – zeroflagL

+0

@zeroflagLは意味があります。春の起動時には、実際にはTomcatサーバーが組み込まれています。 URLを設定する方法を詳しく説明できますか? – Hippoom

答えて

1

Spring MVCテストフレームワークでリクエストパラメータを指定する場合、物理HTTPリクエストがないため、パラメータの値を手動でエンコードする必要はありません。

だから、あなたのテストで という値を使っても問題ありません。

@RunWith(SpringRunner.class) 
@WebMvcTest(WeChatOauthController.class) 
public class WeChatOauthControllerTest { 

    @Autowired 
    private MockMvc mvc; 

    @Test 
    public void itShouldRedirectToWeChatToFinishOauthProtocol() throws Exception { 
     this.mvc.perform(get("/wechat/browser") 
      .param("origin", "http://www.example.com/index.html?a=b#/route")) 
      .andDo(print()) 
     //omitted codes 
    } 
} 
+0

うん、理解する。テストで意図が明らかにならず、おそらくこのエンドポイントの使い方についての誤解を招くおそれがあると心配しました。 – Hippoom

関連する問題