`

在SpringMVC中使用@RequestBody注解处理json时,报出HTTP Status 415的解决方案

阅读更多

Spring的@RequestBody非常牛x,可以将提交的json直接转换成POJO对象。

正好今天有这样的需求,使用一下,结果一直报415,十分头疼。

HTTP 415 错误 – 不支持的媒体类型(Unsupported media type)

我的angularJs是这样写的

复制代码
$http({method: "POST",
    url: url;
    headers: {'Content-type': 'application/json;charset=UTF-8'},
    data: scope.$modelValue})
.success(function(data, status) {
    // success handle code  
})
.error(function(data, status) {
    // error handle code
});
复制代码

url与scope.$modelValue都是项目中的代码,在这里占个坑,scope.$modelValue是一个js对象,会被angularJs转换成json字符串,

反复看angularJs的文档,又抓包分析,确认js没有问题。

在网上一查貌似是Spring的问题,有的网友说需要在*-servlet.xml中增加<mvc:annotation-driven />,一看我的项目没加,立刻加上。

当然还需要加上mvc的xml命名空间,否则该配置无法解析。

xmlns:mvc="http://www.springframework.org/schema/mvc"
xsi:schemaLocation="http://www.springframework.org/schema/mvc
http://www.springframework.org/schema/mvc/spring-mvc-3.0.xsd"

<mvc:annotation-driven />会自动注册DefaultAnnotationHandlerMapping和AnnotationMethodHandlerAdapter两个bean

AnnotationMethodHandlerAdapter将会初始化7个转换器,可以通过调用 AnnotationMethodHandlerAdapter的getMessageConverts()方法来获取转换器的一个集合 List<HttpMessageConverter>

复制代码
ByteArrayHttpMessageConverter 
StringHttpMessageConverter 
ResourceHttpMessageConverter 
SourceHttpMessageConverter 
XmlAwareFormHttpMessageConverter 
Jaxb2RootElementHttpMessageConverter 
MappingJacksonHttpMessageConverter
复制代码

对于json的解析就是通过MappingJacksonHttpMessageConverter转换器完成的。

只添加<mvc:annotation-driven />还不行,需要在classpath环境中能找到Jackson包,用maven配置如下

 

复制代码
 <dependency>  
        <groupId>org.codehaus.jackson</groupId>  
        <artifactId>jackson-mapper-asl</artifactId>  
        <version>1.9.8</version>  
        <type>jar</type>  
        <scope>compile</scope>  
 </dependency>  
复制代码

 

至此问题解决,附上Spring代码

复制代码
@RequestMapping(value = "/testjson", method = RequestMethod.POST, consumes = "application/json")
@ResponseBody
public void testJson(@RequestBody JsonInfo jsonInfo,
    HttpServletRequest request, HttpServletResponse response)
{
    //handle jsonInfo object instance
}
复制代码

 

 从下文得到帮助,对作者表示感谢:)

 

http://snowolf.iteye.com/blog/1628861

分享到:
评论

相关推荐

    SpringMVC JSON格式的读取和显示

    本篇文章将深入探讨如何在Spring MVC中实现JSON格式的数据处理,包括JSON的解析、转换以及使用注解进行配置。 首先,让我们理解JSON的基本概念。JSON是一种轻量级的数据交换格式,易于人阅读和编写,同时也易于机器...

    springMVC+json.zip_JSON_myeclipse_springmvc_数据传递

    在IT行业中,SpringMVC和JSON是两个非常重要的技术组件,尤其在开发Web应用程序时。SpringMVC作为Spring框架的一部分,提供了强大的模型-视图-控制器(MVC)架构支持,而JSON则是一种轻量级的数据交换格式,常用于...

    springMVC整合json

    在这里,`@RequestBody`注解用于将JSON请求体映射到方法参数,而`@ResponseBody`注解则表明方法的返回值应转换为JSON并返回给客户端。 **6. 测试与调试** 创建的SpringMVC应用可以通过发送HTTP请求来测试JSON接口。...

    基于springMVC3.2的REST源码,结合了jquery和json

    对于请求参数,可以使用`@RequestBody`注解将JSON请求体解析为Java对象。 5. **异常处理**:使用@ControllerAdvice和@ExceptionHandler注解定义全局的异常处理器,为RESTful服务提供统一的错误响应。 **jQuery和...

    SpringMVC是Spring家族的一款专注于解决控制器层问题的框架技术,学习资料第二天

    使用 `@RequestBody` 注解可以接收 JSON 格式的数据,实现 Ajax 交互。 三、文件上传 SpringMVC 提供了文件上传功能,开发者可以轻松地实现文件上传。 3.1 编写客户端表单 在客户端编写表单,使用 `enctype=...

    详解springmvc之json数据交互controller方法返回值为简单类型

    总结一下,在处理Controller方法返回值为简单类型与JSON数据交互时,一般不需要使用@RequestBody注解。可以通过JavaScript的JSON.stringify()方法发送数据给后端,同时在后端,我们可以使用ObjectMapper类将简单类型...

    SpringMVC加入json支持的jar

    只需在控制器方法的参数上使用`@RequestBody`: ```java @PostMapping("/example") public ResponseEntity&lt;?&gt; handleRequest(@RequestBody MyRequest request) { // 处理请求 return new ResponseEntity...

    Spring MVC--6.RESTful SpringMVC CRUD

    在实现上述功能时,Spring MVC提供了一些核心组件,如`DispatcherServlet`(负责分发请求)、`ModelAndView`(用于处理模型和视图)、`@Controller`和`@RequestMapping`(映射HTTP请求),以及`@PathVariable`、`@...

    SpringMVC的Restful风格Demo

    在IT行业中,SpringMVC是Java企业级应用开发中广泛使用的Web框架,它极大地简化了构建基于MVC(Model-View-Controller)架构的应用程序。而RESTful风格是一种设计网络应用程序的方法,它强调资源的概念,并通过HTTP...

    解决SpringMVC接收不到ajaxPOST参数的问题

    在SpringMVC中,如果使用@RequestBody注解接收参数时,需要将contentType设置为"application/json;charset=utf-8",否则将无法接收到参数值。例如: ```java @PostMapping("/method2") @ResponseBody @...

    springmvc之rest风格的crud

    使用`@RequestBody`注解接收请求体中的数据: ```java @PostMapping("/users") public User createUser(@RequestBody User user) { // 保存新用户到数据库 return user; } ``` 7. **PUT和DELETE操作** PUT...

    Spring MVC学习笔记之json格式的输入和输出

    3. **使用@RequestBody注解**:在Spring MVC中,可以使用@RequestBody注解来绑定请求体中的JSON数据到方法的参数上。例如,在方法testJson1中,@RequestBody注解将接收到的JSON数据自动绑定到User对象u上。然后,...

    springmvc 之 RestfulCRUD实例练习工程

    在这个例子中,`@RequestBody`注解将请求体转换为User对象,`UserService`处理业务逻辑,最后使用`ResponseEntity`返回HTTP响应,包括状态码和创建的用户信息。 在实际应用中,你还需要配置数据库连接,比如使用...

    使用springmvc整合ajax请求demo代码示例

    这里的`@RequestBody`和`@ResponseBody`注解分别用于将HTTP请求体转换为方法参数和将方法返回值转化为HTTP响应体。 2. **定义Ajax请求**:在前端,使用JavaScript或jQuery库来发送Ajax请求。jQuery简化了Ajax操作,...

    Spring MVC--7.REST风格 CRUD

    6. **JSON序列化和反序列化**:Spring MVC默认使用Jackson库处理JSON数据的序列化和反序列化。`@RequestBody`用于将请求体转换为Java对象,`@ResponseBody`用于将Java对象转换为HTTP响应体。 7. **错误处理**:为了...

    Spring MVC与Ajax交互源码

    Spring MVC和Ajax是Web开发中的两个重要技术,它们在构建动态、交互性强的网页应用时起着关键作用。Spring MVC是Spring框架的一部分,提供了一种模型-视图-控制器(MVC)架构来组织和处理HTTP请求,而Ajax...

    SpringmvcAjax.zip

    当Ajax请求不需要提交表单数据时,可以使用Spring MVC的注解如`@GetMapping`、`@PostMapping`等来处理请求。在前端,你可以使用jQuery的`$.ajax()`或者`$.getJSON()`等方法发起请求。在后端,Controller中的方法...

    Spring MVC 关于controller的字符编码问题

    在处理这些参数时,Spring MVC会自动进行编码和解码,但需要注意的是,如果你在请求体中使用非英文字符,确保客户端和服务器都使用一致的字符集,否则仍然可能出现编码问题。 总结来说,Spring MVC中处理Controller...

Global site tag (gtag.js) - Google Analytics