安
HttpMessageNotReadableException是
当read方法失败时,由HttpMessageConverter实现抛出。
您还会收到400错误的请求。所有这些都应该告诉您,您没有发送服务器期望的内容。您的服务器期望什么?
@RequestMapping(value = "/requestpayment", method = RequestMethod.POST, headers="Accept=application/json")@ResponseBodypublic ResponseEntity<PaymentResult> handleRequestPayment(@RequestBody PaymentRequest paymentRequest, HttpServletRequest request, HttpServletResponse response, BindingResult result) throws Exception{
这里最主要的是带
@RequestBody注释的参数。因此,您要告诉服务器尝试
PaymentRequest从HTTP
POST请求的主体中反序列化实例。
让我们来看看您的要求
mockMvc.perform(post("/requestpayment") .contentType(MediaType.APPLICATION_JSON) .accept(MediaType.APPLICATION_JSON)) .andDo(print()) .andExpect(status().isBadRequest());
我看不到您为请求提供正文。那里应该有一个
content(String)电话来设置POST请求的内容。此内容应为的JSON序列化
PaymentRequest。
请注意,由于使用
StandaloneMockMvcBuilder,您可能需要自行设置
HttpMessageConverter实例,即。一个
MappingJackson2HttpMessageConverter序列化和反序列化JSON。
请注意,该
BindingResult参数应紧随与其相关的参数之后。像这样
@RequestMapping(value = "/requestpayment", method = RequestMethod.POST, headers="Accept=application/json")@ResponseBodypublic ResponseEntity<PaymentResult> handleRequestPayment(@Valid @RequestBody PaymentRequest paymentRequest, BindingResult result, HttpServletRequest request, HttpServletResponse response) throws Exception{
别忘了
@Valid。
请注意
requestPaymentController.setLoginService(mockLoginService);requestPaymentController.handleRequestPayment(mockPaymentRequest, mockHttpServletRequest, mockHttpServletResponse, mockBindingResult);
与
MockMvc您正在执行的测试完全无关。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)