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();
}
}
}
相关推荐
在这个例子中,`createUser` 方法使用 `@RequestBody` 从请求体中获取JSON数据并转换为 `CreateUserRequest` 对象。而 `getUser` 方法返回一个 `User` 对象,通过 `@ResponseBody` 将其转换为JSON并返回给客户端。 ...
在这个例子中,`@RequestBody` 将请求体中的JSON转换为`User`对象,然后可以进一步处理保存用户信息的逻辑。 `@ResponseBody` 注解则用在方法返回值前,表明方法的返回结果应该直接写入到HTTP响应体中,而不是作为...
Spring MVC注解之@ResponseBody和@RequestBody详解 在Spring MVC框架中,@ResponseBody和@RequestBody是两个非常重要的注解,它们分别用于处理HTTP请求响应体和请求体的序列化和反序列化。下面,我们将详细介绍这两...
本项目"Java后台服务器Maven+SpringMVC+Ajax+@RequestBody+Json传输"就是一个很好的示例,它展示了如何利用这些技术进行前后端的数据交互。下面我们将详细探讨这些知识点。 首先,`Maven`是Java项目管理工具,它...
当控制器方法接收POST、PUT等带有请求体的HTTP请求时,`@RequestBody`可以帮助我们将接收到的JSON字符串自动映射到Java对象上,从而简化了数据处理的流程。 在上述描述的场景中,开发者首先克隆了一个Spring官方的...
快速解决SpringMVC @...使用 @RequestBody 注解可以快速解决 SpringMVC 中的请求参数接收问题,但是需要注意一些细节,如使用 @RequestParam 注解,使用 getParameterMap() 方法,使用 JSON.stringify() 方法等。
当我们在控制器方法的参数前加上`@RequestBody`时,Spring MVC会尝试将请求体中的内容(通常是以JSON格式)转换为与参数类型匹配的对象。例如,在示例中,如果前端发送了一个嵌套的JSON对象,`@RequestBody Map, ...
总结来说,SpringMVC的@RequestBody注解是一个非常强大的工具,它使得开发者可以方便地在控制器方法中接收JSON格式的数据,并将其自动转换为Java对象。这对于实现RESTful风格的Web服务尤为重要。开发者只需注意确保...
在Spring MVC中,`@RequestBody` 注解用于接收HTTP请求体中的JSON或其他格式的数据,并将其自动绑定到控制器方法的参数上。然而,在实际开发中,可能会遇到“415 Unsupported Media Type”错误,这意味着服务器无法...
为了解决这个问题,我们需要使用RequestBodyAdvisor和ResponseBodyAdvisor来实现对@RequestBody和@Response的日志输出。RequestBodyAdvisor可以获取到解析后的Controller方法参数对象,而ResponseBodyAdvisor可以...
主要介绍了Spring MVC参数校验的相关资料,主要是针对`@RequestBody`返回`400`的问题,文中通过示例代码介绍的非常详细,对大家具有一定的参考学习价值,需要的朋友们下面跟着小编来一起学习学习吧。
SpringMVC通过注解可以极大地简化配置,如`@Controller`、`@RequestMapping`等,使得控制器类的编写更加直观。 ### MyBatis MyBatis是一个优秀的持久层框架,它支持定制化SQL、存储过程以及高级映射。MyBatis避免...
总结起来,Spring MVC对JSON的支持主要依赖于Jackson库,通过`@ResponseBody`和`@RequestBody`注解实现数据交换,配合注解进行类型转换控制,同时允许开发者自定义序列化和反序列化行为,以及配置错误处理机制。...
在这个例子中,`@RequestBody`注解将请求体中的JSON转换为User对象,`@ResponseBody`则将控制器返回的User对象转换为JSON响应。 此外,我们还可以自定义JSON序列化和反序列化的规则,例如忽略某些字段、自定义日期...
3. 使用`@RequestBody`和`@ResponseBody`注解处理JSON数据的转换。 4. 在前端使用合适的API发送JSON请求。 5. 编写测试用例验证JSON转换功能的正确性。 通过理解和实践这个示例,开发者可以掌握在Spring MVC中处理...
在控制器中,我们可以使用`@RequestBody`和`@ResponseBody`注解来处理JSON数据。`@RequestBody`用于将请求体中的JSON数据映射到方法参数,而`@ResponseBody`则将方法返回的对象转换为JSON并写入响应体。 例如: ```...
1. `@RequestBody`:这个注解用于控制器方法的参数上,表示将HTTP请求体中的JSON数据转换为Java对象。例如,如果你有一个`User`类,你可以创建一个如下的控制器方法: ```java @PostMapping("/users") public ...
此外,我们还可以使用@RequestParam、@PathVariable、@RequestBody和@ResponseBody等注解来处理请求参数和响应数据。 接下来,JPA(Java Persistence API)是Java官方提供的ORM(Object-Relational Mapping)标准,...
- **定义与作用**:`@Controller` 是一个用于标记一个类为 SpringMVC 控制器的注解。它表明该类的主要职责是处理来自 DispatcherServlet 的 HTTP 请求,并负责业务逻辑处理后将数据传递给视图进行展示。 - **使用...
当我们在控制器方法的参数前添加`@RequestBody`时,Spring MVC会调用一个名为`HttpMessageConverter`的策略接口的实现来解析请求体。默认情况下,Spring MVC提供了一些内置的`HttpMessageConverter`,例如`...