楼主在用Jersey开发Restful Webservice的时候碰到了这样一个问题java
一样一个方法实现,用@get定义和@post定义,@get能经过测试,而@post不能chrome
@GET //@POST @Path("/getUser") @Produces("application/json") //@Consumes(application/x-www-form-urlencoded) public String getUserById(@QueryParam("loginID") String loginID) throws Exception { String users = null; CVCUserDAO dao = new CVCUserDAO(); ArrayList<User> datas = dao.getUsers(loginID); Gson gson = new Gson(); users = gson.toJson(datas); return users; // return "Hello World"; }
历来我觉得get和post只是一种规范,好吧。。。从某种程度上,是的。json
可是当使用浏览器去测试它的时候,就不是了浏览器
经过浏览器的地址栏输入地址,所访问的URL都是get请求,所以若是以post定义方法,那么因为请求与实现的不一致,会返回405错误,method not allowed, The specified HTTP method is not allowed for the requested resource.安全
这归根究竟是由于浏览器发送了get请求,而方法只能处理post请求,因此发生的错误app
多是这么问题太low了,我网上找了一大圈都没有找到答案,最后在stackoverflow上找到了解答post
http://stackoverflow.com/questions/25253972/put-jersey-error-405-method-not-allowed测试
他说的很好,若是想用浏览器作post的测试,那么就下一个chrome的postman插件,完美解决你的问题加密
最后从360Doc上找到了Get和Post请求的区别,贴在这里url
1. 哪一些状况下,浏览器会发送get请求
a. 直接在浏览器地址栏输入某个地址
b. 点击连接
c. 表单默认的提交方式
2. 哪一些状况下,浏览器会发送post请求?
a. 设置表单method = "post"
3. get请求的特色
a. 请求参数会添加到请求资源路劲的后面,只能添加少许参数(由于请求行只有一行,大约只能存放2K左右的数据)(2K左右的数据,看起来也很多。。。)
b. 请求参数会显示在浏览器地址栏,路由器会记录请求地址
4. post请求的特色
a. 请求参数添加到实体内容里面,能够添加大量的参数(也解释了为何浏览器地址栏不能发送post请求,在地址栏里咱们只能填写URL,并不能进入到Http包的实体当中)
b. 相对安全,可是,post请求不会对请求参数进行加密处理(可使用https协议来保证数据安全)。