zoukankan      html  css  js  c++  java
  • 用浏览器测试Get与Post Webservice,Post一直报405错误,而Get能够成功的原因与解决方法

    楼主在用Jersey开发Restful Webservice的时候碰到了这样一个问题

    同样一个方法实现,用@get定义和@post定义,@get能通过测试,而@post不能

    	@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只是一种规范,好吧。。。从某种程度上,是的。

    但是当使用浏览器去测试它的时候,就不是了

    通过浏览器的地址栏输入地址,所访问的URL都是get请求,因此如果以post定义方法,那么由于请求与实现的不一致,会返回405错误,method not allowed,  The specified HTTP method is not allowed for the requested resource.

    这归根到底是因为浏览器发送了get请求,而方法只能处理post请求,所以发生的错误

    可能是这么问题太low了,我网上找了一大圈都没有找到答案,最后在stackoverflow上找到了解答

    http://stackoverflow.com/questions/25253972/put-jersey-error-405-method-not-allowed

    他说的很好,如果想用浏览器做post的测试,那么就下一个chrome的postman插件,完美解决你的问题

    最后从360Doc上找到了Get和Post请求的区别,贴在这里

    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协议来保证数据安全)。

  • 相关阅读:
    购物网站数据库表
    C#Excel的导入与导出
    DataTable过滤重复字段
    压力测试~一套完整的压力测试项目文档
    压力测试~测试工具的使用
    C#调用本机摄像头
    linq学习笔记
    EasyPlayer RTSP播放器对RTSP播放地址url的通用兼容修改意见
    我们计划为EasyDSS定制开发一款超低延时的EasyPlayer Flash播放器
    EasyRTMP+EasyDSS实现一套完整的紧急视频回传直播与存储回放方案
  • 原文地址:https://www.cnblogs.com/Raymond-Yang/p/5412611.html
Copyright © 2011-2022 走看看