This is my method inside my controller which is annotated by @Controller
@RequestMapping(value = "/getServerAlertFilters/{serverName}/", produces = "application/json; charset=utf-8") @ResponseBody public JSONObject getServerAlertFilters(@PathVariable String serverName) { JSONObject json = new JSONObject(); List<FilterVO> filteredAlerts = alertFilterService.getAlertFilters(serverName, ""); JSONArray jsonArray = new JSONArray(); jsonArray.addAll(filteredAlerts); json.put(SelfServiceConstants.DATA, jsonArray); return json; }
I am expecting {"data":[{"useRegEx":"false","hosts":"v2v2v2"}]}
as my json.
And this is my JUnit test:
@Test public final void testAlertFilterView() { try { MvcResult result = this.mockMvc.perform(get("/getServerAlertFilters/v2v2v2/").session(session) .accept("application/json")) .andDo(print()).andReturn(); String content = result.getResponse().getContentAsString(); LOG.info(content); } catch (Exception e) { e.printStackTrace(); } }
Here is the console output:
MockHttpServletResponse: Status = 406 Error message = null Headers = {} Content type = null Body = Forwarded URL = null Redirected URL = null Cookies = []
Even result.getResponse().getContentAsString()
is an empty string.
Can someone please suggest how to get my JSON in my JUnit test method so that I can complete my test case.
I use TestNG for my unit testing. But in Spring Test Framework they both looks similar. So I believe your test be like below
@Test public void testAlertFilterView() throws Exception { this.mockMvc.perform(get("/getServerAlertFilters/v2v2v2/"). .andExpect(status().isOk()) .andExpect(content().json("{'data':[{'useRegEx':'false','hosts':'v2v2v2'}]}")); }
If you want check check json Key and value you can use jsonpath .andExpect(jsonPath("$.yourKeyValue", is("WhatYouExpect")));
You might find thatcontent().json()
are not solveble please add
import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.*;
The 406 Not Acceptable
status code means that Spring couldn't convert the object to json. You can either make your controller method return a String and do return json.toString();
or configure your own HandlerMethodReturnValueHandler
. Check this similar question Returning JsonObject using @ResponseBody in SpringMVC
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With