`
wangmengbk
  • 浏览: 292415 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

SpringMVC Control(控制器)对注解@RequestBody 单元测试示例( Could not read JSON)解决

 
阅读更多

 

org.springframework.http.converter.HttpMessageNotReadableException: Could not read JSON: No content to map to Object due to end of input; 异常处理后的结果示例如下:

 

对于在SprngMVC 控制器层使用 @RequestBody 注解作为参数使用 MockHttpServletRequest 进行测试示例:

//运行类

@RunWith(SpringJUnit4ClassRunner.class)

//bean的配置文件路径

@ContextConfiguration(locations = {"/com/wangmeng/dpap/module/springmvctest/spring.xml", "/com/wangmeng/dpap/module/springmvctest/springmvc-servlet.xml"})

public class EmpControllerTest {

 

//注入 controll 控制器

@Autowired

   private EmpController empController;

 

@Autowired  

private RequestMappingHandlerAdapter handlerAdapter;

//定义request 对象

MockHttpServletRequest request = new MockHttpServletRequest();

//定义 response 对象

MockHttpServletResponse response = new MockHttpServletResponse(); 

 

  @Test

public void insertEmpTest(){

 

String emp="{\"name\":\"emptest\",\"age\":10}";

//请求路径

request.setRequestURI("springmvctest/empAdd");

//请求方式

       request.setMethod(HttpMethod.POST.name()); 

       //请求方式为JSON (如果在Control 层中参数接收方式@RequestBody 必须要设置请求方式为 JSON)

       request.setContentType("application/json;charset=UTF-8");

       //设置请求数据 对于注解使用的 @RequestBody 使用setContent() 传递参数,对于使用的注解是@RequestParam就可以使用addParameter() 传递参数

       request.setContent(emp.getBytes()); //在springMVC 通过 MappingJackson2HttpMessageConverter 将json 转化为 JavaBean 对象设置的请求信息,如果不使用该方法就会 抛出 org.springframework.http.converter.HttpMessageNotReadableException: Could not read JSON: No content to map to Object due to end of input;

 

try {

handlerAdapter.handle(request, response, new HandlerMethod(empController,"insertEmp",EmpVo.class));

//获取@ResponseBody 的返回信息

String bodyStr = response.getContentAsString();

Assert.assertNotNull(bodyStr);

} catch (NoSuchMethodException e) {

// TODO Auto-generated catch block

e.printStackTrace();

} catch (Exception e) {

// TODO Auto-generated catch block

e.printStackTrace();

}  

        

     

 

}

 

//@Test

public void deleteEmpTest(){

request.addParameter("id","1000");

request.setRequestURI("springmvctest/deleteEmp");  

       request.setMethod(HttpMethod.POST.name()); 

       request.setContentType("application/json;charset=UTF-8");

// 在控制层如果返回的是ModelAndView  即可使用该对象

       ModelAndView view = new ModelAndView();

try {

view = handlerAdapter.handle(request, response, new HandlerMethod(empController,"deleteEmp",String.class));

  Assert.assertEquals("springmvctest/index", view.getViewName()); 

} catch (NoSuchMethodException e) {

// TODO Auto-generated catch block

e.printStackTrace();

} catch (Exception e) {

// TODO Auto-generated catch block

e.printStackTrace();

}  

 

       Assert.assertNull(view);  

}

 

// @Test

public void empListTest(){

   request.addParameter("seachKey","");

   request.addParameter("start","0");

   request.addParameter("limit","20");

request.setRequestURI("springmvctest/empList");  

       request.setMethod(HttpMethod.POST.name()); 

       request.setContentType("application/json;charset=UTF-8");

       ModelAndView view = new ModelAndView();

try {

view = handlerAdapter.handle(request, response, new HandlerMethod(empController,"empList",String.class,int.class,int.class));

Assert.assertNotNull(view);

} catch (NoSuchMethodException e) {

// TODO Auto-generated catch block

e.printStackTrace();

} catch (Exception e) {

// TODO Auto-generated catch block

e.printStackTrace();

}  

 

       

}

 

}

 

 

分享到:
评论

相关推荐

    SpringMVC中使用@RequestBody,@ResponseBody注解实现Java对象和XML/JSON数据自动转换(下)

    在这个例子中,`createUser` 方法使用 `@RequestBody` 从请求体中获取JSON数据并转换为 `CreateUserRequest` 对象。而 `getUser` 方法返回一个 `User` 对象,通过 `@ResponseBody` 将其转换为JSON并返回给客户端。 ...

    SpringMVC中使用@RequestBody,@ResponseBody注解实现Java对象和XML/JSON数据自动转换(上)

    在这个例子中,`@RequestBody` 将请求体中的JSON转换为`User`对象,然后可以进一步处理保存用户信息的逻辑。 `@ResponseBody` 注解则用在方法返回值前,表明方法的返回结果应该直接写入到HTTP响应体中,而不是作为...

    springMvc注解之@ResponseBody和@RequestBody详解

    Spring MVC注解之@ResponseBody和@RequestBody详解 在Spring MVC框架中,@ResponseBody和@RequestBody是两个非常重要的注解,它们分别用于处理HTTP请求响应体和请求体的序列化和反序列化。下面,我们将详细介绍这两...

    Java后台服务器Maven+SpringMVC+Ajax+@RequestBody+Json传输

    本项目"Java后台服务器Maven+SpringMVC+Ajax+@RequestBody+Json传输"就是一个很好的示例,它展示了如何利用这些技术进行前后端的数据交互。下面我们将详细探讨这些知识点。 首先,`Maven`是Java项目管理工具,它...

    SpringMVC restful 注解之@RequestBody进行json与object转换

    当控制器方法接收POST、PUT等带有请求体的HTTP请求时,`@RequestBody`可以帮助我们将接收到的JSON字符串自动映射到Java对象上,从而简化了数据处理的流程。 在上述描述的场景中,开发者首先克隆了一个Spring官方的...

    快速解决SpringMVC @RequestBody 用map接收请求参数的问题

    快速解决SpringMVC @...使用 @RequestBody 注解可以快速解决 SpringMVC 中的请求参数接收问题,但是需要注意一些细节,如使用 @RequestParam 注解,使用 getParameterMap() 方法,使用 JSON.stringify() 方法等。

    springMvc注解之 ResponseBody和 RequestBody.docx

    当我们在控制器方法的参数前加上`@RequestBody`时,Spring MVC会尝试将请求体中的内容(通常是以JSON格式)转换为与参数类型匹配的对象。例如,在示例中,如果前端发送了一个嵌套的JSON对象,`@RequestBody Map, ...

    详解SpringMVC @RequestBody接收Json对象字符串

    总结来说,SpringMVC的@RequestBody注解是一个非常强大的工具,它使得开发者可以方便地在控制器方法中接收JSON格式的数据,并将其自动转换为Java对象。这对于实现RESTful风格的Web服务尤为重要。开发者只需注意确保...

    Spring源码学习十一:SpringMVC-@RequestBody接收json数据报4151

    在Spring MVC中,`@RequestBody` 注解用于接收HTTP请求体中的JSON或其他格式的数据,并将其自动绑定到控制器方法的参数上。然而,在实际开发中,可能会遇到“415 Unsupported Media Type”错误,这意味着服务器无法...

    Spring MVC打印@RequestBody、@Response日志的方法

    为了解决这个问题,我们需要使用RequestBodyAdvisor和ResponseBodyAdvisor来实现对@RequestBody和@Response的日志输出。RequestBodyAdvisor可以获取到解析后的Controller方法参数对象,而ResponseBodyAdvisor可以...

    Spring MVC参数校验详解(关于`@RequestBody`返回`400`)

    主要介绍了Spring MVC参数校验的相关资料,主要是针对`@RequestBody`返回`400`的问题,文中通过示例代码介绍的非常详细,对大家具有一定的参考学习价值,需要的朋友们下面跟着小编来一起学习学习吧。

    SpringMVC+MyBatis+MySql注解示例

    SpringMVC通过注解可以极大地简化配置,如`@Controller`、`@RequestMapping`等,使得控制器类的编写更加直观。 ### MyBatis MyBatis是一个优秀的持久层框架,它支持定制化SQL、存储过程以及高级映射。MyBatis避免...

    springmvc对json支持

    总结起来,Spring MVC对JSON的支持主要依赖于Jackson库,通过`@ResponseBody`和`@RequestBody`注解实现数据交换,配合注解进行类型转换控制,同时允许开发者自定义序列化和反序列化行为,以及配置错误处理机制。...

    springmvc-json-lib.rar

    在这个例子中,`@RequestBody`注解将请求体中的JSON转换为User对象,`@ResponseBody`则将控制器返回的User对象转换为JSON响应。 此外,我们还可以自定义JSON序列化和反序列化的规则,例如忽略某些字段、自定义日期...

    springMVC json格式转换demo

    3. 使用`@RequestBody`和`@ResponseBody`注解处理JSON数据的转换。 4. 在前端使用合适的API发送JSON请求。 5. 编写测试用例验证JSON转换功能的正确性。 通过理解和实践这个示例,开发者可以掌握在Spring MVC中处理...

    springmvc操作json数据所需的jar包

    在控制器中,我们可以使用`@RequestBody`和`@ResponseBody`注解来处理JSON数据。`@RequestBody`用于将请求体中的JSON数据映射到方法参数,而`@ResponseBody`则将方法返回的对象转换为JSON并写入响应体。 例如: ```...

    SpringMVC JSON格式的读取和显示

    1. `@RequestBody`:这个注解用于控制器方法的参数上,表示将HTTP请求体中的JSON数据转换为Java对象。例如,如果你有一个`User`类,你可以创建一个如下的控制器方法: ```java @PostMapping("/users") public ...

    spring+springmvc+jpa零配置注解开发

    此外,我们还可以使用@RequestParam、@PathVariable、@RequestBody和@ResponseBody等注解来处理请求参数和响应数据。 接下来,JPA(Java Persistence API)是Java官方提供的ORM(Object-Relational Mapping)标准,...

    springmvc常用注解标签详解

    - **定义与作用**:`@Controller` 是一个用于标记一个类为 SpringMVC 控制器的注解。它表明该类的主要职责是处理来自 DispatcherServlet 的 HTTP 请求,并负责业务逻辑处理后将数据传递给视图进行展示。 - **使用...

    扩展SpringMVC以支持绑定JSON格式的请求参数

    当我们在控制器方法的参数前添加`@RequestBody`时,Spring MVC会调用一个名为`HttpMessageConverter`的策略接口的实现来解析请求体。默认情况下,Spring MVC提供了一些内置的`HttpMessageConverter`,例如`...

Global site tag (gtag.js) - Google Analytics