私は失敗したテストを受けています。サービスが正常に動作しますが、私はこの展開サービスに対する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;
}
}
私はそれがそれのような単純なものであることを知っていました。それが問題を解決しました。ありがとう。 – JCN