尝试测试HTTP POST的处理时HttpMediaTypeNotSupportedException

时间:2015-07-24 11:33:07

标签: spring unit-testing http spring-mvc

我正在尝试在spring框架中测试POST方法,但我一直都会遇到错误。

我首先尝试了这个测试:

this.mockMvc.perform(post("/rest/tests").
                            param("id", "10").
                            param("width","25")
                            )
                .andDo(MockMvcResultHandlers.print())
                .andExpect(status().isOk());

并收到以下错误:

org.springframework.http.converter.HttpMessageNotReadableException

然后我尝试修改测试如下:

this.mockMvc.perform(post("/rest/tests/").
                            content("{\"id\":10,\"width\":1000}"))
                .andDo(MockMvcResultHandlers.print())
                .andExpect(status().isOk());              

但得到以下错误:
                 org.springframework.web.HttpMediaTypeNotSupportedException

我的控制器是:

@Controller
@RequestMapping("/rest/tests")
public class TestController {

    @Autowired
    private ITestService testService;

    @RequestMapping(value="", method=RequestMethod.POST)
    @ResponseStatus(value = HttpStatus.OK)
    public void add(@RequestBody Test test)
    {
        testService.save(test);
    }
}

Test类有两个字段成员:idwidth。简而言之,我无法为控制器设置参数。

设置参数的正确方法是什么?

1 个答案:

答案 0 :(得分:5)

您应该在帖子请求中添加内容类型MediaType.APPLICATION_JSON,例如

this.mockMvc.perform(post("/rest/tests/")
                .contentType(MediaType.APPLICATION_JSON)
                .content("{\"id\":10,\"width\":1000}"))
                .andDo(MockMvcResultHandlers.print())
                .andExpect(status().isOk());