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)
のように
私が知る限り、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();