验证码: 看不清楚,换一张 查询 注册会员,免验证
  • {{ basic.site_slogan }}
  • 打开微信扫一扫,
    您还可以在这里找到我们哟

    关注我们

SpringMVC @RequestBody自动转json Http415错误如何解决

阅读:304 来源:乙速云 作者:代码code

SpringMVC @RequestBody自动转json Http415错误如何解决

SpringMVC @RequestBody自动转json Http415错误

项目中想用@RequestBody直接接收json串转成对象

网上查了使用方法,看着非常简单,不过经过测试很快发现页面直接报415错误。


        

HTTP Status 415 - 

                     

                type Status report             

            

                message                              

            

                description                 The server refused this request because the request entity is in a format not supported by the requested resource for the requested method.             

                      

Apache Tomcat/6.0.41

经过一通查,多半的解决方法实说header里的 Content-Type 一定 application/json

但是问题依然没有解决。

最后在《Spring in Action》里找到一个信息

有两个前提条件:

The request’sContent-Typeheader must be set toapplication/json.

The JacksonJSONlibrary must be available on the application’s classpath. 

我满足了第一个,所以在classpath中添加了一个jar。问题解决了。

        
            com.fasterxml.jackson.core
            jackson-databind
            2.5.3
        

所以如果大家遇到了同样的问题,可以先排除一下这两个因素。

还有一种情况,在以上两个条件都满足的情况下,还是报同样的错误。

在springmvc的配置文件中必须有:

    
    

如果没有这个配置也是会报这个错的!

为什么会引入jackson-databind包呢,因为默认的配置会用到:

com.fasterxml.jackson.databind.ObjectMapper


            
                
                    
                        
                            
                                
                            
                        
                    
                
            
        

SpringMVC @RequestBody使用

Spring mvc是一个非常轻量的mvc框架,注解可以大大减少配置,让请求的拦截变得比较简单。这次记录下@RequestBody 注解接收参数尤其是数组参数的用法。

关于容器的配置不再多说,这里写出spring-servlet.xml的sechme:



          
	
	
	

只要对应包名下面的添加注解即可扫描到对应的控制器,一般采用@Controller

  • RequestBody接收基本类型

@Controller
public class TestController {
	// url请求拦截
	@RequestMapping("test/test.do")
	@ResponseBody // 返回参数为JSON
	public void test(@RequestBody String name) {
		System.out.println("getParams : " + name);
	}![](https://img-blog.csdn.net/20161114115809292)
}

@RequestBody只要接收POST请求Body里的数据。

SpringMVC @RequestBody自动转json Http415错误如何解决

这样发送请求,即可在java控制台中打印:

getParams : {"name":"micro"}

  • @RequestBody接收基本数组

然后我们接收基本类型数组:

	@RequestMapping("test/test.do")
	@ResponseBody
	public void test(@RequestBody List nameList) {
		System.out.println("getParams : " + nameList);
	}

SpringMVC @RequestBody自动转json Http415错误如何解决

这样即可获取到参数,不要body里写成了{“nameList”:[“name1”,“name2”]}这样会抛出异常。

@RequestBody是对应的POST请求的body,body即是获取的参数,如果想通过参数去获取,则要使用@RequestParams 注解:

	@RequestMapping("test/test.do")
	@ResponseBody
	public void test(@RequestParam("name") String name) {
		System.out.println("getParams : " + name);
	}

SpringMVC @RequestBody自动转json Http415错误如何解决

注意是GET请求,参数直接放到URL后面,这样就可以使用@RequestParams获取到对应参数名的参数值。

如果是复杂的对象。

@RequestBody的使用。

定义model:

class Person {
	private Long id;
	private String name;
	// setter getter
}
  • @RequestBody接收复杂对象

接收参数的方式

@RequestMapping("test/test.do")
	@ResponseBody
	public void test(@RequestBody Person person) {
		System.out.println("getParams : " + person.getId() + " ," + person.getName());
	}

即可获取到参数,body里的参数会自动匹配到person的属性并赋值。

注意名字要与对象的属性变量名一致。否则获取不到参数,例如这里就不能在body里写成{“i”:1,“name”:“micro”},这样获取到person的id为null。

  • @RequestBody接收复杂对象数组

如果是复杂对象数组:

	@RequestMapping("test/test.do")
	@ResponseBody
	public void test(@RequestBody List personList) {
		for (Person p : personList) {
			System.out.println(p.getId() + " ," + p.getName());
		}
	}

请求方式如下,注意body里的格式是[]数组。

SpringMVC @RequestBody自动转json Http415错误如何解决

控制台打印:

1 ,micro

2 ,micro2

分享到:
*特别声明:以上内容来自于网络收集,著作权属原作者所有,如有侵权,请联系我们: hlamps#outlook.com (#换成@)。
相关文章
{{ v.title }}
{{ v.description||(cleanHtml(v.content)).substr(0,100)+'···' }}
你可能感兴趣
推荐阅读 更多>