web-dev-qa-db-ja.com

jsonコンテンツをオブジェクトとして取得するためにSpring MockMVCに組み込まれたメソッドはありますか?

私のSpringプロジェクトでは、controllers/http-apiをチェックするテストをいくつか作成しました。応答のjsonコンテンツを非直列化オブジェクトとして取得する方法はありますか?

他のプロジェクトでは私は安心して使用し、期待されるオブジェクトとして直接結果を取得する方法があります。

次に例を示します。

_    MvcResult result = rest.perform( get( "/api/byUser" ).param( "userName","test_user" ) )

            .andExpect( status().is( HttpStatus.OK.value() ) ).andReturn();
    String string = result.getResponse().getContentAsString();
_

このメソッドは、jsonとして特定のタイプを返します。このjsonをオブジェクトに変換して、その内容をテストする方法は?私はジャクソンまたは安心の方法を知っていますが、spring/test/mockmvc内に方法があります

getContentAs(Class)のように

11
dermoritz

私が知る限り、MockHttpServletResponse(RestTemplateとは異なります)には、返されたjsonを特定の型に変換できるメソッドがありません
つまり、Jakson ObjectMapperを使用してjson文字列を特定の型に変換することができます

このようなもの

String json = rt.getResponse().getContentAsString();
SomeClass someClass = new ObjectMapper().readValue(json, SomeClass.class);

これにより、さまざまなことを主張できるようになります。

そうは言っても、 MockMvc::performは、ResultActionsを受け取るメソッドandExpectを持つResultMatcherを返します。これには、結果のjsonをオブジェクトに変換せずにテストするための多くのオプションがあります。

例えば

mvc.perform(  .....
                ......
                .andExpect(status().isOk())
                .andExpect(jsonPath("$.firstname").value("john"))
                .andExpect(jsonPath("$.lastname").value("doe"))
                .andReturn();
10
pvpkiran