java.lang.AssertionError: Content type not set - Spring Controller Junit Tests
Your solution depends on what kinds of annotation you want to use in your project.
You can add
@ResponseBody
to your getSchema method in ControllerOr, maybe adding
produces
attribute in your@RequestMapping
can solve it too.@RequestMapping(value="/schema", method = RequestMethod.GET, produces = {MediaType.APPLICATION_JSON_VALUE} )
Final choice, add headers to your
ResponseEntity
(which is one of the main objective of using this class)//... HttpHeaders headers = new HttpHeaders(); headers.add("Content-Type", "application/json; charset=utf-8"); return new ResponseEntity<MyObject>(new MyObject(), headers, HttpStatus.OK);
Edit : I've just seen you want Json AND Xml Data, so the better choice would be the produces
attribute:
@RequestMapping(value="/schema",
method = RequestMethod.GET,
produces = {MediaType.APPLICATION_JSON_VALUE, MediaType.APPLICATION_XML_VALUE} )
blong824
I am a Developer in Phoenix, AZ. I have experience working with Java, Spring, Javascript, Html5, and CSS3. I enjoy golfing, reading, learning new things, and spending time with my wife and daughter.
Updated on December 30, 2020Comments
-
blong824 over 3 years
I am trying to do some unit testing on my controllers. No matter what I do all controller tests return
java.lang.AssertionError: Content type not set
I am testing that the methods return json and xml data.
Here is an example of the controller:
@Controller @RequestMapping("/mypath") public class MyController { @Autowired MyService myService; @RequestMapping(value="/schema", method = RequestMethod.GET) public ResponseEntity<MyObject> getSchema(HttpServletRequest request) { return new ResponseEntity<MyObject>(new MyObject(), HttpStatus.OK); } }
The unit test is set up like this:
public class ControllerTest() { private static final String path = "/mypath/schema"; private static final String jsonPath = "$.myObject.val"; private static final String defaultVal = "HELLO"; MockMvc mockMvc; @InjectMocks MyController controller; @Mock MyService myService; @Before public void setup() { MockitoAnnotations.initMocks(this); mockMvc = standaloneSetup(controller) .setMessageConverters(new MappingJackson2HttpMessageConverter(), new Jaxb2RootElementHttpMessageConverter()).build(); when(myService.getInfo(any(String.class))).thenReturn(information); when(myService.getInfo(any(String.class), any(Date.class))).thenReturn(informationOld); } @Test public void pathReturnsJsonData() throws Exception { mockMvc.perform(get(path).contentType(MediaType.APPLICATION_JSON)) .andDo(print()) .andExpect(content().contentTypeCompatibleWith(MediaType.APPLICATION_JSON)) .andExpect(jsonPath(jsonPath).value(defaultVal)); }
}
I am using: Spring 4.0.2 Junit 4.11 Gradle 1.12
I have seen the SO question Similiar Question but no matter what combination of contentType and expect in my unit test I get the same result.
Any help would be much appreciated.
Thanks