java get post 注解,GET/POST接收或发送数据的问题

在文章开始,先来回忆一下GET、POST这两种请求方式的区别。

Http定义了与服务器交互的不同方法,最基本的方法有4种,分别是GET,POST,PUT,DELETE。URL全称是资源描述符,我们可以这样认为:一个URL地址,它用于描述一个网络上的资源,而HTTP中的GET,POST,PUT,DELETE就对应着对这个资源的查,改,增,删4个操作。到这里,大家应该有个大概的了解了,GET一般用于获取/查询资源信息,而POST一般用于更新资源信息。

0、GET请求,请求的数据会附加在URL之后,以?分割URL和传输数据,多个参数用&连接。URL的编码格式采用的是ASCII编码,而不是uniclde,即是说所有的非ASCII字符都要编码之后再传输。

POST请求:POST请求会把请求的数据放置在HTTP请求包的包体中。上面的item=bandsaw就是实际的传输数据。

因此,GET请求的数据会暴露在地址栏中,而POST请求则不会。

1、传输数据的大小

在HTTP规范中,没有对URL的长度和传输的数据大小进行限制。但是在实际开发过程中,对于GET,特定的浏览器和服务器对URL的长度有限制。因此,在使用GET请求时,传输数据会受到URL长度的限制。

对于POST,由于不是URL传值,理论上是不会受限制的,但是实际上各个服务器会规定对POST提交数据大小进行限制,Apache、IIS都有各自的配置。

2、安全性

POST的安全性比GET的高。这里的安全是指真正的安全,而不同于上面GET提到的安全方法中的安全,上面提到的安全仅仅是不修改服务器的数据。比如,在进行登录操作,通过GET请求,用户名和密码都会暴露再URL上,因为登录页面有可能被浏览器缓存以及其他人查看浏览器的历史记录的原因,此时的用户名和密码就很容易被他人拿到了。除此之外,GET请求提交的数据还可能会造成Cross-site request frogery攻击

3、HTTP中的GET,POST,SOAP协议都是在HTTP上运行的

以上内容摘自?哪?如有雷同,不关我事。

以下内容是我在开发中对遇到的问题做的总结,能力一般,水平有限,如有错误,敬请指出。

0. 发出POST请求,获取某接口中的数据。

需求简述: 从指定的接口中获取到数据并存储,POST请求头的header中需要加接口发布方提供的串码,否则POST请求会被拦截,导致获取不到数据。

核心代码如下:一般在service层做处理

**使用IDEA,SpringBoot微服务架构,MongoDB数据库。**

public List getDataFromURL(){

String result = "";//用来接收接口中的数据。

String url = "获取数据的接口URL写在这里";

/*

*此处引入了commons-httpclient的jar包,jar包依赖如下:

commons-httpclient

commons-httpclient

3.1

*/

HttpClient httpClient = new HttpClient();

PostMethod postMethod = new PostMethod(url);

try {

//设置header的名称和值。

postMethod.setRequestHeader("headerKey","headerValue");

int statusCode = 0;//设置请求结果的状态值,一般为200、404、500

try {

statusCode = httpClient.executeMethod(postMethod);

}catch (Exception e ){

e.printStackTrace();

}

if(statusCode == HttpStatus.SC_OK){

try {

result = postMethod.getResponseBodyAsString();

}catch (Exception e){

e.printStackTrace();

}

}else{

System.out.println("请求有误,错误代码:"+statusCode);

}

}catch (Exception e){

System.out.println(e.getMessage());

}finally {

//关闭HTTP连接,这两行代码一定要有。

postMethod.releaseConnection();

httpClient.getHttpConnectionManager().closeIdleConnections(0);

}

JSONObject jsonObject = new JSONObject(result);

JSONArray jsonArray = new JSONArray();

try {

//我需要的是接口中的“data”值,具体get什么看自己需求。

jsonArray = jsonObject.get("data");

}catch (Exception e){

System.out.println("获取不到data,检查串码是否过期");

}

List list = new ArrayList<>();

for (int i = 0; i < jsonArray.length();i++){

Document document = new Document();

//这个截字符串的方法不错。记住传参一般都是“包头不包尾”

String time = ((JSONObject)jsonArray.get(i)).getString("time").replace("T"," ").substring(0,19);

//获取JSON数组中的数据,按需求数据格式转换入库数据的格式。

//这里就写上你对接口中数据的处理吧,想要什么get什么,之后在return它。

}

return list;

}

1. 发出POST请求,将数据发送至某接口

需求简述 : 某模块发布出一个接口,规定了传数据的格式,我需要把数据库中的数据查出来,组合成为对方需求的格式并发出。

核心代码如下:一般在service层做处理,查询数据的过程不展示

**IDEA、SpringBoot、MongoDB**

//如果项目中多次使用到发数据至某接口的方法,可将此方法作为工具类,设置合理的参数列表即可

public class SendDataToURL {

//参数列表:url--发送数据的目标地址。param--发送的内容,格式依据自身需求

public static Boolean sendPost(String url, String param){

OutputStreamWriter out = null;

BufferedReader in = null;

String result = "";

try {

URL realUrl = new URL(url);

HttpURLConnection conn = null;

conn = (HttpURLConnection) realUrl.openConnection();

// 发送POST请求必须设置如下两行

conn.setDoOutput(true);

conn.setDoInput(true);

// 设置请求方式为POST方法

conn.setRequestMethod("POST");

// 设置通用的请求属性

conn.setRequestProperty("accept", "*/*");

conn.setRequestProperty("connection", "Keep-Alive");

conn.setRequestProperty("user-agent",

"Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1;SV1)");

conn.setRequestProperty("Content-Type", "application/x-www-form-urlencoded");

//此处可以设置请求参数,若接口的header中有串码可以在此设置。

conn.setRequestProperty("headerKey", "headerValue");

conn.connect();

// 获取URLConnection对象对应的输出流

out = new OutputStreamWriter(conn.getOutputStream(),"UTF-8");

// 发送请求参数,发送的数据在此处发送。

out.write(param);

// flush输出流的缓冲

out.flush();

// 定义BufferedReader输入流来读取URL的响应

in = new BufferedReader(

new InputStreamReader(conn.getInputStream(), "UTF-8"));

String line ;

while ((line = in.readLine()) != null) {

result += line;

}

} catch (Exception e) {

System.out.println("发送 POST 请求出现异常!"+e);

e.printStackTrace();

}

//使用finally块来关闭输出流、输入流

finally{

try{

if(out!=null){

out.close();

}

if(in!=null){

in.close();

}

}

catch(IOException ex){

ex.printStackTrace();

}

}

//result为请求结束后返回的response,可以让接口发布方设置数据是否发送成功的标识,具体怎么返回还需要你们自己协商。

if(result.contains("SUCCESS")){

return true;

}else{

return false;

}

}

2.由页面发起GET请求,之后POST数据至指定接口,接口方收到数据后返回响应信息,由service层做处理,再由controller返回响应信息至GET请求发起方。

需求简述 : 页面中的button发起了GET请求,controller中调用相关的处理方法,将数据以POST的形式发送至某接口中,接口发布方收到数据之后,返回响应信息(其中包括对接收状态的标识),由返回信息判断是否成功接收数据,之后再返回响应信息至GET请求发起方,展示是否成功发送数据。

controller层发布接口,供页面发起GET请求用,返回值为String(也可为其他,视自身情况定)。

**IDEA、SpringBoot、MongoDB、RESTful**

@RestController//此注解包含了@ResponseBody和@Controller注解。

@RequestMapping(value = "/sendDataToURL")

public class TestController {

@RequestMapping(value = "/test" , method = RequestMethod.GET)

//使用@RequestParam注解获取GET请求发起方request中的信息。

//如:http://localhost:8080/sendDataToURL/test?id=test

public String testSendData(@RequestParam("id") String id){

Boolean flag = 发送数据的方法,返回值可定义为boolean,可做响应信息的标识

logger.info(flag ? "成功" : "失败";//打上日志,方便查看

return flag ? "true" : "false";

}

}

**在service层做对数据发送的处理,方法参照本文第1部分**

本文中还涉及到对JSON对象、JSON数组、Document对象、List集合等问题的处理,都属于基本操作,注意字段取值时的拼写问题即可,不做详述。

本文系投稿作品,点击阅读原文即可阅读原作者的博客,欢迎大家投稿!

68bfdf3476ef0c6acd06a67b23f67ce1.gif

始发于微信公众号: Java知音

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/540965.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

mybatis中sql语句传入多个参数方法

1 使用map <select id"selectRole" parameterType"map" resultType"RoleMap">SELECT id, roleName, noteFROM roleWHERE roleName LIKE Concat(%,#{roleName},%)and note like Concat(%,#{note},%)</select> 在接口中如下定义 List&…

kotlin半生对象_Kotlin程序| 随播对象特征

kotlin半生对象伴侣对象 (Companion object) If you need a function or a property to be tied to a class rather than to instances of it (similar to static in java), you can declare it inside a companion object: 如果需要将函数或属性绑定到类而不是实例(类似于java…

mysql安装注意步骤,mysql安装步骤

mysql安装步骤1、在官网下载对应的压缩文件&#xff0c;放到本地文件夹下&#xff0c;解压缩。2、配置Path环境变量&#xff1a;新增mysql的bin文件夹路径&#xff0c;C:\software\mysql-8.0.23-winx64\bin。3、在mysql根目录下新增my.ini配置文件。内容如下&#xff0c;basedi…

maven插件介绍之tomcat7-maven-plugin

tomcat7-maven-plugin插件的pom.xml依赖为&#xff1a; <dependency><groupId>org.apache.tomcat.maven</groupId><artifactId>tomcat7-maven-plugin</artifactId><version>2.2</version> </dependency>一&#xff1a;直接执行…

在Python中模拟do-while循环

Python as a language doesnt support the do-while loop. However, we can have a workaround to emulate the do-while loop. Python作为一种语言不支持do-while循环。 但是&#xff0c;我们可以采用一种变通方法来模拟do-while循环 。 The syntax for do-while is as follo…

织梦cms生成首页html的php文件,织梦DedeCMS定时自动生成首页HTML的实现方法

只需要制作一个文件然后在首页模板添加一句代码就可以实现让织梦DedeCMS自动生成首页html&#xff0c;具体方法如下&#xff1a;第一步、需要在首页调用随机文章&#xff0c;这样每次自动更新才会有更新的效果&#xff0c;随机文章调用标签如下&#xff1a;{dede:arclist sortr…

Linux下安装Flume

1 下载Flume Welcome to Apache Flume — Apache Flume 下载1.9.0版本 2 上传服务器并解压安装 3 删除lib目录下的guava-11.0.2.jar &#xff08;如同服务器安装了hadoop&#xff0c;则删除&#xff0c;如没有安装hadoop则保留这个文件&#xff0c;否则无法启动flume&#…

Apple新发布的APFS文件系统对用户意味着什么

2016年WWDC大会上&#xff0c;Apple除了公布watchOS、tvOS、macOS以及iOS等一系列系统和软件更新外&#xff0c;还公布了一个名为APFS&#xff08;Apple File System&#xff09;的文件系统。 这一全新文件系统专门针对闪存/SSD进行优化&#xff08;但依然可用于传统机械硬盘&a…

chown –r mysql:mysql,mysql部署,操作及异常处理

1、将mysql-5.1.50-linux-x86_64-glibc23.tar.gz移至/usr/local/目录下&#xff0c;并改名为mysql增加mysql组#groupadd mysql建mysql用户&#xff0c;并加入到mysql组中#useradd –g mysql mysql源码包解压#tar mysql-5.1.50-linux-x86_64-glibc23.tar.gz将解压后的源码包放置…

光伏等新能源信用风险事件频繁爆发

2016年以来&#xff0c;伴随着供给侧改革相关政策陆续出台和落地&#xff0c;去产能、去杠杆诱发信用风险事件陆续爆出。而在“11天威NTN1”、“15云峰PPN001”及“15云峰PPN003”等信用风险事件上&#xff0c;大股东“弃车保帅”行为再现&#xff0c;令本就失去造血能力的企业…

ruby array_Ruby中带有示例的Array.zip()方法

ruby arrayArray.zip()方法 (Array.zip() Method) In this article, we will study about Array.zip() Method. You all must be thinking the method must be doing something which is related to zipping values of the Array instance. It is not as simple as it looks. W…

matlab中迪杰斯特拉算法,dijkstra算法(迪杰斯特拉算法)

单源最短路径算法——Dijkstra算法&lpar;迪杰斯特拉算法&rpar;一 综述 Dijkstra算法(迪杰斯特拉算法)主要是用于求解有向图中单源最短路径问题.其本质是基于贪心策略的(具体见下文).其基本原理如下: (1)初始化:集合vertex_set初始为{sourc ...Dijkstra【迪杰斯特拉算法…

关于概率算法的问题,不知道逻辑错在哪里,求debug

做个骰子成功几率的分析&#xff0c;投n颗骰子&#xff0c;第一次投成功的几率是a,然后投成功的骰子&#xff0c;需要再投1次&#xff0c;这次成功的几率是b。第二次成功的骰子才算最终成功。 要分析出n颗骰子&#xff0c;最终成功0到n颗的概率。 我写了个算法&#xff0c;求出…

tps 交易量_交易处理系统(TPS)

tps 交易量A transaction is a simple process that takes place during business operations. The transaction processing system (TPS) manages the business transactions of the client and therefore helps a companys operations. A TPS registers, as well as all of i…

matlab for循环不覆盖,将输出保存到文本文件而不覆盖和打印矩阵中的N个条目[matlab]...

这是代码&#xff1a;for i 1:4;fileID fopen(testdata.txt, at);fprintf(fileID, this is answer %d\n,i);fprintf(fileID, %5.3e\n, v{i});fclose(fileID);end在记事本中回答&#xff1a;this is answer 11.000e0001.000e0001.000e0001.000e0001.000e0001.000e0000.000e0001…

(转)Redis研究(一)—简介

http://blog.csdn.net/wtyvhreal/article/details/41855327 Redis是一个开源的高性能键值对数据库。它通过提供多种键值数据类型来适应不同场景下的存储需求&#xff0c;并借助许多高层级的接口使其可以胜任如缓存、队列系统等不同的角色。 1.1历史和发展 2008年&#xff0c;意…

c bitset get_Java BitSet get()方法与示例

c bitset getBitSet类的get()方法 (BitSet Class get() method) Syntax: 句法&#xff1a; public boolean get(int bit_in);public BitSet get(int st_in, int en_in);get() method is available in java.util package. get()方法在java.util包中可用。 get(int bit_in) meth…

有扰动的闭环传递函数 matlab,(d)闭环系统的误差传递函数.PPT

(d)闭环系统的误差传递函数3. 控制系统的方框图模型 若已知控制系统的方框图,使用MATLAB函数可实现方框图转换。 a).串联 如图所示G1(s)和G2(s)相串联,在MATLAB中可用串联函数series( )来求G1(s)G2(s),其调用格式为 [num,den]series(num1,den1,num2,den2) 其中&#xff1a; b)并…

CYQ.Data 轻量数据层之路 自定义MDataTable绑定续章(七)

本章起&#xff0c;将续章讲解整框架当初的设计思路&#xff1a; 本章既为续章&#xff0c;说明我以前写过&#xff0c;是的&#xff0c;以前我写过内部整个MDataTable的构造&#xff0c;不过&#xff0c;当初匆匆写完后&#xff0c; 最后一步的实现MDataTable绑定GridView/Dat…

php 文字超出画布,input实现文字超出省略号(代码示例)

本篇文章给大家带来的内容是关于input实现文字超出省略号(代码示例)&#xff0c;有一定的参考价值&#xff0c;有需要的朋友可以参考一下&#xff0c;希望对你有所帮助。input实现文字省略号功能普通元素实现文字超出宽度自动变成省略号非常简单&#xff0c;给元素加个宽度&…