2016-04-21 4 views
0

私は失敗したテストを受けています。サービスが正常に動作しますが、私はこの展開サービスに対するURLしようとすると、JerseyTest JUnitテストは、ステータス400JerseyTestフレームワークのパスエンコードが置き換えられますか? %3F付き

ポストマンやブラウザを使用して失敗している:

http://localhost:8080/myService/123?appId=local&userId=jcn 

私が得る正しい結果、ステータス200をログの次を参照してください。

INFO: 4 * Server has received a request on thread http-nio-8080-exec-5 
4 > GET http://localhost:8080/myService/123?appId=local&userId=jcn 

注意してください?正しいURLです。

しかし、私は私のJeryseyTest拡張JUnitのクラスで、このユニットテストを試してみてください。

@Test 
public void getWithCorrectUrlExecutesWithoutError() 
{ 
    String x = target("myService/123?appId=local&userId=jcn").request().get(String.class); 
} 

それは、ステータス400で失敗し、私はログにこれを参照してください。

INFO: 1 * Server has received a request on thread grizzly-http-server-0 
1 > GET http://localhost:9998/myService/123%3FappId=local&userId=jcn 

。なお、 ? %3Fに置き換えられました。

何が起こっているのか分かりません。ブラウザで "%3F" URLを試しても、単体テストと同じ400エラーが表示されます。だから私は、URLのエンコーディングが問題であることをいくらか確信しています。それは一種の長いですので、ここで

は私のジャージーリソース、部分的なリストですが、私は、これは関連する部分であるかなり確信している:

@Component 
    @Path("/myService") 
    public class MyResource 
    { 
     @Autowired 
     SomeDao someDao; 

     @NotBlank 
     @QueryParam("appId") 
     private String appId; 

     @NotBlank 
     @QueryParam("userId") 
     private String userId; 


     @GET 
     @Path("/{id}") 
     @Produces(MediaType.APPLICATION_JSON) 
     public Status getStatus(@NotBlank @PathParam("id") String id) 
     { 
      errors = new ArrayList<>(); 
      Status retVal; 

      if(validateId(id)) 
      { 
       retVal = someDao.getStatus(id); 
      } 
      else 
      { 
       throw new BadParameterException(String.join(" | ", errors)); 
      } 

      return retVal; 
     } 
} 

答えて

3

あなたのWebTargetインスタンス上queryParam methodを使用することができます。

String x = target("myService/123") 
    .queryParam("appId", "local") 
    .queryParam("userId", "jcn") 
    .request() 
    .get(String.class); 
+0

私はそれがそれのような単純なものであることを知っていました。それが問題を解決しました。ありがとう。 – JCN

関連する問題