精华内容
下载资源
问答
  • restful接口返回json的详细设计

    千次阅读 2019-06-13 22:02:59
    在上一篇博客(https://blog.csdn.net/qq1332479771/article/details/91582151 )的参考下,总结出如下的返回值... * 前端数据返回体 * @author Wayss. */ @Data public class ResponseMessage { /** * 响应码...

    在上一篇博客(https://blog.csdn.net/qq1332479771/article/details/91582151 )的参考下,总结出如下的返回值对象。

    import lombok.Data;
    
    /**
     * 前端数据返回体
     * @author Wayss.
     */
    @Data
    public class ResponseMessage {
    
        /**
         * 响应码
         */
        private Integer code;
    
        /**
         * 响应信息
         */
        private String message;
    
        /**
         * 响应具体数据
         */
        private Object data;
    
        /**
         * 响应额外信息
         */
        private Object extra;
    
        /**
         * 页号
         */
        private Integer pageNum;
    
        /**
         * 分页大小
         */
        private Integer pageSize;
    
        /**
         * 总条数
         */
        private Integer totalSize;
    
        /**
         * 设置响应信息
         *
         * @param responseCode 前端RESTful返回信息的响应码
         * @return 返回当前对象
         */
        public ResponseMessage setResponseCode(ResponseCode responseCode) {
            this.code = responseCode.getCode();
            this.message = responseCode.getMessage();
            return this;
        }
    }
    

    其中,ResponseCode参考:https://segmentfault.com/a/1190000018552463https://github.com/kylin-t/kylin-frame/blob/master/kylin-admin/src/main/java/com/kylin/common/enums/ResultCode.java (PS:我也不知道谁抄谁,学术引用吧 ^ _ ^)

    故,详细设计如下:

    /**
     * 前端RESTful返回信息的响应码
     */
    public enum ResponseCode {
    
        /* 成功状态码 */
        SUCCESS(1, "成功"),
    
        /* 参数错误:10001-19999 */
        PARAM_IS_INVALID(10001, "参数无效"),
        PARAM_IS_BLANK(10002, "参数为空"),
        PARAM_TYPE_BIND_ERROR(10003, "参数类型错误"),
        PARAM_NOT_COMPLETE(10004, "参数缺失"),
    
        /* 用户错误:20001-29999*/
        USER_NOT_LOGGED_IN(20001, "用户未登录"),
        USER_LOGIN_ERROR(20002, "账号不存在或密码错误"),
        USER_ACCOUNT_FORBIDDEN(20003, "账号已被禁用"),
        USER_NOT_EXIST(20004, "用户不存在"),
        USER_HAS_EXISTED(20005, "用户已存在"),
    
        /* 业务错误:30001-39999 */
        SPECIFIED_QUESTIONED_USER_NOT_EXIST(30001, "某业务出现问题"),
    
        /* 系统错误:40001-49999 */
        SYSTEM_INNER_ERROR(40001, "系统繁忙,请稍后重试"),
    
        /* 数据错误:50001-599999 */
        RESULE_DATA_NONE(50001, "数据未找到"),
        DATA_IS_WRONG(50002, "数据有误"),
        DATA_ALREADY_EXISTED(50003, "数据已存在"),
    
        /* 接口错误:60001-69999 */
        INTERFACE_INNER_INVOKE_ERROR(60001, "内部系统接口调用异常"),
        INTERFACE_OUTTER_INVOKE_ERROR(60002, "外部系统接口调用异常"),
        INTERFACE_FORBID_VISIT(60003, "该接口禁止访问"),
        INTERFACE_ADDRESS_INVALID(60004, "接口地址无效"),
        INTERFACE_REQUEST_TIMEOUT(60005, "接口请求超时"),
        INTERFACE_EXCEED_LOAD(60006, "接口负载过高"),
    
        /* 权限错误:70001-79999 */
        PERMISSION_NO_ACCESS(70001, "无访问权限"),
        ;
    
        private Integer code;
    
        private String message;
    
        ResponseCode(Integer code, String message) {
            this.code = code;
            this.message = message;
        }
    
        public Integer getCode() {
            return code;
        }
    
        public void setCode(Integer code) {
            this.code = code;
        }
    
        public String getMessage() {
            return message;
        }
    
        public void setMessage(String message) {
            this.message = message;
        }
    
    }
    
    
    展开全文
  • 这篇文章主要介绍了Ajax调用restful接口传送Json格式数据的方法的相关资料,非常不错,具有参考借鉴价值,感兴趣的朋友一起看下吧ajax传送json格式数据,关键是指定contentType,data要是json格式如果是restful接口...

    这篇文章主要介绍了Ajax调用restful接口传送Json格式数据的方法的相关资料,非常不错,具有参考借鉴价值,感兴趣的朋友一起看下吧

    ajax传送json格式数据,关键是指定contentType,data要是json格式

    如果是restful接口,把type改成对应的post(增)、delete(删)、put(改)、get(查)即可

    var post_data={"name":"test001","pass":"xxxx"};

    $.ajax({

    url: "http://192.168.10.111:8080/uc/login",

    type: 'post',

    contentType: "application/json; charset=utf-8",

    data:JSON.stringify(post_data),

    success:function (data) {

    //调用成功

    },

    error: function(data, textStatus, errorThrown){

    //调用失败

    }

    });

    上面是我整理给大家的,希望今后会对大家有帮助。

    相关文章:

    展开全文
  • 不管是通过Java或者是Python编码的方式调用RESTful接口将结果入库,都是有一定复杂度的,首先你要加载第三方REST组件,然后连接数据库,写SQL语句,最后插入的目标数据库中 但我们有了Kettle这个工具之后,只需要使用她的...

    不管是通过Java或者是Python编码的方式调用RESTful接口将结果入库,都是有一定复杂度的,首先你要加载第三方REST组件,然后连接数据库,写SQL语句,最后插入的目标数据库中

    但我们有了Kettle这个工具之后,只需要使用她的图形化界面Spoon就可以很方便的完成接口调用及入库的操作

    简单的GET请求

    需求

    我们拥有接口api地址:http://xxx.domin.com/api

    请求方式Get,无参数传递,响应内容如下:

    我们需要将该JSON数据导入数据库中,如果region字段存在,则更新该数据

    实战

    首先需要在Spoon中新建一个转换,菜单选项:文件 -> 新建 -> 转换

    首先我们需要分析,我们这个转换操作需要哪些组件:

    • 需要输入请求url
    • 发送RESTful请求
    • 入库
    • JSON解析

    定义变量

    既然我们的url是指定的,那么我们可以在输入对象树中选择一个生成记录的组件

    配置REST client组件

    设定好请求接口变量,接下来选择发送RESTFul的组件,因为我们是请求的接口,因此可以直接选择REST client组件

    因为我们在生产记录的组件中定义了接口的地址,因此我们这里可以选择从字段中获取地址,然后在URL field name中选择我们上个步骤中定义的变量名称

    然后选择请求类型GET,输入输出的结果变量名称result

    定义JSON输入流

    接下来,通过REST组件,我们其实已经拿到的接口响应的JSON结果,此时我们需要一个JSON的输入流组件来接收,因此我们需要用到JSON input组件

    JSON input组件我们需要设定两个关键的值

    • 设置数据来源,因为我们是通过REST请求来获取的JSON,而并非是JSON文件,因此我们可以使用上个步骤中的输出字段result来作为我们的JSON输入源
    • 设置输出隐射字段,我们得到了JSON的结果,通过接口的结果我们得知是一个JSON数组,因此我们需要设置字段名称,通过读取JSON的结果字段设置字段的映射

    JSON input组件中,字段的路径规则是通过$.field来设置的,但从上图我们可以看到,貌似并没有按照此种方式来设置,而是中间多了一层[]中括号,这是因为我们的目标源返回的JSON是集合,而非对象

    返回集合的JSON实例:

    [{
        "id":123,
        "title":"我是标题"
    }]
    

    如果是以上这种方式,我们需要获取title的映射字段的话,那么我们在路径的表达式中应该写成$.[*].title的格式

    那假设我们的JSON结果是以下这种方式:

    {
        "id":123,
        "title":"我是标题"
    }
    

    我们需要获取title字段的映射只需要写$.title

    如果是多级层次对象,则通过.*的通配符一直匹配下去即可.

    字段选择

    此时,我们已经得到了JSON输入流的字段映射关系,我们可以选择一个字段选择组件进行字段匹配

    点击获取选择的字段按钮,可以迅速获取我们在JSON input组件中定义的映射字段

    获取字段后,我们可以为字段更改名称、长度、精度等

    数据入库

    通过以上步骤,我们已经选择了字段列表,此时,我们选择输出对象树中的插入/更新组件,将我们从接口中获取的JSON数据进行更新到数据库中

    插入/更新我们从字面意思即可得知,如果我们的数据库中存在记录行则进行插入操作,否则通过指定的字段进行更新.

    组件的选项卡意思也很清晰明了,先选择数据库表,如果我们没有建立数据库,则需要首先建立数据库连接,此处不再骜述

    用来查询的关键字:此表可以设置我们的更新字段,即我们数据根据此字段来查询的字段,如果存在即更新

    更新字段:点击获取和更新字段按钮,可以获取字段选择中我们设定好的字段列表,然后再进行选择

    执行

    通过以上的步骤,我们已经完成了整个ETL过程的创建,如下图:

    此时,我们点击工具栏的运行按钮,运行我们的ETL转换

    运行,查看控制台日志输出

    我们在查看我们的数据库,是否已经插入成功

    数据库中已经存在数据,说明我们的整个过程是成功

    POST带参数请求

    需求

    已知某POST接口http://test.com/api?page=0&size=100

    发送JSON请求体:{}

    获取如下JSON结构:

    此时我们需要将content节点中的数据请求并入库

    实战

    我们有了简单的GET请求的经验,因此当我们在构建POST请求的ETL过程的时候就简单了很多,首先我们分析需求,同样是接口地址,请求参数,因此我们第一步也是定义变量

    定义变量

    同样的,限制条数为1条

    配置REST client组件

    因为是POST请求,因此我们在REST client组件中会和GET有一些区别,如下图:

    首先设定请求类型为POST,同时设置Application Type为JSON类型,设置Body field字段,该字段为我们在请求时候发送给接口的BODY内容,和我们写Java程序时赋予的application/json内容是一致的,因为我们在生成记录中已经定义了BODY字段,因此在这里只需要设置字段的名称即可

    第二步,我们在需求的时候有发现,POST请求还需要两个参数,分别是page和size字段,可以通过在REST client组件的Parameters选项卡中进行设定

    参数设置组件这里大家可能会产生疑问,为什么会有两列Parameter,应该如何设置,给大家说明一下:

    第一列相当于设置的是参数的值,因为我们在定义变量中已经设置的变量,因此这里实际相当于是引用关系

    第二列是参数的名称,也就是我们实际访问url的时候通过?paramName来访问的这个paramName参数名称

    定义JSON输入流

    定义JSON输入流和我们在上面GET请求时介绍的差不多,唯一的区别在于我们需要根据REST client组件响应给我们的JSON格式来判断,给定不同的字段映射关系

    因为我们需求的接口响应的JSON格式如下:

    {
        "content":[{"id":"12112122"//....}],
        "first":true,
         //more
    }
    

    我们最终是要将content属性中的字段入库,加上我们的JSON是返回的是Object对象,因此我们的映射关系如下图:

    字段选择

    字段选择的步骤和GET请求相同

    数据入库

    数据入库同GET请求配置步骤

    执行

    通过以上步骤,我们已经完成了整个ETL过程的创建,如下图:

    此时,我们点击执行,查看我们的日志和数据库,如下图:

    通过控制台,我们已经看到是成功的,再看我们的数据库

    分页发送POST请求

    需求

    我们在上面已经完成了POST请求的Kettle转换,但是我们会有疑问,因为接口是分页请求,此时如果我们想轮训页码,将接口的数据全部导入到数据库应该如何做呢?

    可能某些人会说我们将页码大小参数size改大一点即可,加入我们的总记录行数是2W行,我们将size设置为2W,这样是否可行呢?

    答案肯定是不行的,因为我们都知道,在通过请求获取的数据都是存在内存中的,2W行数据一次查询出来有可能导致内存溢出的异常,因此并不推荐这么做.

    那么,我们应该如何处理呢?

    实战

    我们通过PostMan等工具或者Chrome浏览器看到的接口请求,当前传递page=0时,返回的数据其实是附带了总页码条数的,那么我们只需要固定轮训小于等于总页码条数,每次传递不同的页码值给参数即可,这个在我们的Java或者Python等面向对象的语言中是非常容易实现的,那么在Kettle中我们应该如何实现?

    此时我们需要使用到Kettle的作业,上面的POST请求实际上是一个Kettle转换,我们通过作业的方式,设定判断条件语句,对转换进行页码轮训,即可达到我们的目的.

    新建作业

    Kettle中的作业一般是以Start组件开始,并以成功组件结束

    选择菜单:文件 -> 新建 -> 作业

    设置变量

    我们既然需要轮询,因此我们需要把我们的相关参数设置在作业中,通过作业传递给子转换的方式,进行page页码轮询,因此我们需要把相关参数抽离出来:

    • page:页码,初始值为0(这里根据实际需求来设定,我这边访问的接口初始从0开始)
    • size:每页显示数据大小,初始值200
    • totalPage:总页码数,我们通过接口查询1次,是可以获取得到总页码数据的,此处为122页
    • url:POST接口请求地址
    • query:POST请求参数体

    最终设定好后,如下图:

    我们需要注意的是,需要指定变量的有效范围,因为参数值需要传递的子作业中,我选择的范围是在JVM中有效,从字面也是也不难理解,就是在JVM运行的时候,该参数值始终有效,和我们的Session概念差不多.

    条件

    此时,我们设定了初始变量,我们需要设定我们的执行条件(当前页码<总页码),因此,从作业的核心对象树条件树中选择检查字段的值组件,如下图:

    获取page源值,判断成功条件,即page<totalPage值,执行子转换

    修改转换获取参数项

    我们通过条件检查的方式,设定了成功时需要执行子转换(POST带参数请求的转换),因为我们把参数都提取在作业中定义,因此,我们的转换需要修改一下

    生成记录组件替换为转换核心对象树中的作业-> 获取变量 组件,如下图:

    而我们的获取变量 组件 如下图:

    类似于我们在该转换中声明一些临时的变量,只不过变量是通过父作业传递过来。

    在转换中我们只需要修改此参数的定义一处即可,后面的步骤无需更改.

    JavaScript脚本条件

    Kettle的作业执行已经执行成功了子转换,此时,我们需要根据page页码轮询,我们可以通过Javascript脚本来动态更改我们的page的值

    代码逻辑如下:

    var page=parent_job.getVariable('page');
    
    var totalPage=parent_job.getVariable('totalPage');
    
    if(page==totalPage){
    
     false;
    }else{
    
    	page++;
    	parent_job.setVariable('page',page);
    	true;
    }
    

    通过parent_job内置对象的getVariable()方法和setVariable()方法分别获取变量和重新赋值变量即可完成此操作

    执行

    整个作业的创建就完成了,如下图:

    此时,我们执行作业,Kettle就会根据作业中的流程,将接口的全部数据导入到数据库中.整个ETL过程到此就完成了.

    展开全文
  • 根据项目经验和自己常用的接口类型,编写了一个公共类,让原生android进行网络数据请求更加方便。 这个方法处理的情况如下: 1、利用httpclient协议进行通信...至于怎样配置两种形式的restful接口。我就不说了 下

    根据项目经验和自己常用的接口类型,编写了一个公共类,让原生android进行网络数据请求更加方便。

    这个方法处理的情况如下:

    1、利用httpclient协议进行通信(httpurlconnection 太类似)

    2、进行post和get请求

    3、接口接收参数有json格式和form表单格式的数据。

    4、我会把接口形式也展现出来。至于怎样配置两种形式的restful接口。我就不说了

    下面开始代码:

    1、按钮调用不同的请求方式


    可以看到我进行了四种方式的请求

    按钮事件添加如下:

    @Override
    public void onClick(View viewid) {
    // TODO Auto-generated method stub
    switch (viewid.getId()) {
    case R.id.btn11:
    {intent.setClass(MainActivity.this, LoadProgressBar.class);
    startActivity(intent);
    break;}

    case R.id.btn12:
    {
    String st="http://10.20.126.239:8089/gwm_web/services/Api/LoginPost";//json接口
    Map<String, Object> map = new LinkedHashMap<String, Object>(); 
    map.put("loginName", "dhj");
    map.put("loginPw", "123456");
       httpclient=new HttpClientClass(st, "POST", "JSON", map,handle);
    httpclient.start();
    break;}

    case R.id.btn13:
    {
    String st="http://10.20.126.239:8089/ApiTest/rest/Api/LoginPost";//form表单接口
    Map<String, Object> map = new LinkedHashMap<String, Object>(); 
    map.put("loginName", "dhj");
    map.put("loginPw", "123456");
       httpclient=new HttpClientClass(st, "POST", "Form", map,handle);
    httpclient.start();
    break;}
    case R.id.btn21:
    {
    String st="http://10.20.126.239:8089/gwm_web/services/Api/LoginGet/DHJ/123456";//json接口
    Map<String, Object> map = new LinkedHashMap<String, Object>();
       httpclient=new HttpClientClass(st, "GET", "JSON", map,handle);
    httpclient.start();
    break;}
    case R.id.btn22:
    {
    String st="http://10.20.126.239:8089/ApiTest/rest/Api/LoginGet";//form表单接口
    Map<String, Object> map = new LinkedHashMap<String, Object>(); 
    map.put("loginName", "DHJ");
    map.put("loginPw", "123456");
       httpclient=new HttpClientClass(st, "GET", "Form", map,handle);
    httpclient.start();
    break;}


    default:
    break;
    }
    }

    可以看到  httpclient=new HttpClientClass(st, "POST", "Form", map,handle);我是把公共类做成了子线程的形式,是不是又减轻你的工作量一点点,具体说一下参数的内容

    st是你要连接的接口地址,第二个参数有post和get两种代表你是机进行post还是get请求。第三个参数代表是进行json格式数据提交还是form表单提交第四个参数主要是用来获取子线程返回结果的获取,子线程和主线程用handler进行通信。

    下面就是看看我写的公共类

    package com.dhj.base.network;


    import java.io.BufferedReader;
    import java.io.IOException;
    import java.io.InputStreamReader;
    import java.io.UnsupportedEncodingException;
    import java.net.HttpURLConnection;
    import java.net.MalformedURLException;
    import java.net.ProtocolException;
    import java.net.URL;
    import java.net.URLEncoder;
    import java.util.ArrayList;
    import java.util.Iterator;
    import java.util.LinkedHashMap;
    import java.util.List;
    import java.util.Map;
    import java.util.Set;


    import org.apache.http.HttpEntity;
    import org.apache.http.HttpResponse;
    import org.apache.http.NameValuePair;
    import org.apache.http.client.ClientProtocolException;
    import org.apache.http.client.HttpClient;
    import org.apache.http.client.entity.UrlEncodedFormEntity;
    import org.apache.http.client.methods.HttpGet;
    import org.apache.http.client.methods.HttpPost;
    import org.apache.http.entity.StringEntity;
    import org.apache.http.impl.client.DefaultHttpClient;
    import org.apache.http.message.BasicNameValuePair;
    import org.json.JSONException;
    import org.json.JSONObject;


    import android.os.Handler;
    import android.os.Message;
    import android.util.Log;


    public class HttpClientClass extends Thread {
    private String requestStyle;
    private String dataStyle;
    private String url;
    String result = null;
    private Handler handle;
    Map<String, Object> map = new LinkedHashMap<String, Object>(); 


    /**
    * @author gw00093437 dhj 2017.1.10
    * @param url
    *            接口地址
    * @param requestStyle
    *            请求类型GET\POST
    * @param dataStyle
    *            数据提交方式FORM\JSON
    * @param map
    *            数据源供转化解析
    * @param handle
    * 返回数据的存储
    */
    public HttpClientClass(String url, String requestStyle, String dataStyle,
    Map map,Handler handle) {
    this.requestStyle = requestStyle;
    this.dataStyle = dataStyle;
    this.url = url;
    this.map = map;
    this.handle=handle;
    }


    @Override
    public void run() {
    // 创建httpclient对象
    HttpClient httpclient = new DefaultHttpClient();
    // 首先判断请求类型
    if (requestStyle.equals("GET")) {
    // GET方式
    String param="";
    Iterator it = map.keySet().iterator();
    String key;
    String value;
    HttpGet get;
    while (it.hasNext()) {
    key = it.next().toString();
    value = (String) map.get(key);
    if(param==""){
    param=key+"="+value;
    }else{
    param=param+"&"+key+"="+value;
    }

    }
    BufferedReader in = null;
    String content=null;
    if(param==""){
    get = new HttpGet(url);
    }else{
    get = new HttpGet(url+"?"+param);
    }

    try {
    HttpResponse response=httpclient.execute(get);
    in = new BufferedReader(new InputStreamReader(response.getEntity()  
                       .getContent()));  
               StringBuffer sb = new StringBuffer("");  
               String line = "";  
               String NL = System.getProperty("line.separator");  
               while ((line = in.readLine()) != null) {  
                   sb.append(line + NL);  
               }  
               in.close();  
               content = sb.toString();
    Message msg = new Message();
                        msg.obj= content;
                        handle.sendMessage(msg);
    } catch (ClientProtocolException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
    } catch (IOException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
    }
    } else {
    // POST方式
    HttpPost post = new HttpPost(url);
    // 判断数据提交类型
    if (dataStyle.equals("JSON")) {
    // json数据类型进行提交
    JSONObject jsonParam = new JSONObject();
    Iterator it = map.keySet().iterator();
    String key;
    String value;
    while (it.hasNext()) {
    key = it.next().toString();
    value = (String) map.get(key);
    try {
    jsonParam.put(key, value);
    } catch (JSONException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
    }
    }
    StringEntity jsonentity = null;
    try {
    jsonentity = new StringEntity(jsonParam.toString(), "utf-8");
    } catch (UnsupportedEncodingException e1) {
    // TODO Auto-generated catch block
    e1.printStackTrace();
    }// 解决中文乱码问题
    jsonentity.setContentEncoding("UTF-8");
    jsonentity.setContentType("application/json");
    post.setEntity(jsonentity);
    HttpResponse response = null;
    try {
    response = httpclient.execute(post);
    } catch (IOException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
    }
    if (response.getStatusLine().getStatusCode() == 200) {
    // 第五步:从相应对象当中取出数据,放到entity当中
    HttpEntity entity = response.getEntity();
    BufferedReader reader = null;
    try {
    reader = new BufferedReader(
    new InputStreamReader(entity.getContent()));
    } catch (IllegalStateException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
    } catch (IOException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
    }

    try {
    result = reader.readLine();
     Message msg = new Message();
                              msg.obj= result;
                              handle.sendMessage(msg);
    } catch (IOException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
    }
    Log.d("dhj", "POST_JSON:" + result);
    }


    } else {
    // form表单形式的数据进行提交 解析map数据
    int size = map.size();
    // 利用KeySet 迭代
    List<NameValuePair> params = new ArrayList<NameValuePair>();
    Iterator it = map.keySet().iterator();
    String key;
    String value;
    while (it.hasNext()) {
    key = it.next().toString();
    value = (String) map.get(key);
    params.add(new BasicNameValuePair(key, value));
    }
    HttpEntity requestEntity = null;
    try {
    requestEntity = new UrlEncodedFormEntity(params);
    } catch (UnsupportedEncodingException e1) {
    // TODO Auto-generated catch block
    e1.printStackTrace();
    } // 将请求体放置到请求对象中
    post.setEntity(requestEntity); // 执行请求对象 form表单的形式/
    HttpResponse response = null;
    try {
    response = httpclient.execute(post);
    } catch (IOException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
    }
    if (response.getStatusLine().getStatusCode() == 200) {
    // 第五步:从相应对象当中取出数据,放到entity当中
    HttpEntity entity = response.getEntity();
    BufferedReader reader = null;
    try {
    reader = new BufferedReader(
    new InputStreamReader(entity.getContent()));
    } catch (IllegalStateException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
    } catch (IOException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
    }

    try {
    result = reader.readLine();
     Message msg = new Message();
                            msg.obj= result;
                            handle.sendMessage(msg);
    } catch (IOException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
    }
    Log.d("dhj", "POST_Form:" + result);
    }
    }


    }
    super.run();
    }
    }

    如果想捕获每个节点的异常可以继续添加代码。详细我就不给大家解析了,自己能分析明白的。

    给大家看一下我的接口:

    1、json格式的接口



    @Path("Api")
    public class ApiTest {
    @POST
    @Path("LoginPost")
    @Produces("application/json")
    @Consumes( { "application/json" })
    public JSONObject LoginPost(UserInfo user)
    throws JSONException {
    JSONObject o=new JSONObject();
    o.put("Json_post_name", user.getLoginName());
    System.out.println("Json_post_name:"+user.getLoginName()+"&&"+user.getLoginPw());
    return o;
    }
    @GET
    @Path("LoginGet/{loginName}/{loginPw}")
    @Produces("application/json")
    @Consumes( { "application/json" })
    public JSONObject LoginGet(@PathParam("loginName") String loginName,@PathParam("loginPw") String loginPw)
    throws JSONException {
    JSONObject o=new JSONObject();
    o.put("Json_get_name", loginName);
    System.out.println("Json_get_name:"+loginName+"&&"+loginPw);
    return o;
    }
    }

    2、form表单格式的接口。spring mvc中的架构



    @Controller
    @RequestMapping("/Api")
    public class PostApi {
    @RequestMapping(value = "/LoginGet", method = RequestMethod.GET)
    public JSONObject LoginGet( HttpServletRequest request,
    HttpServletResponse response) throws IOException {
    response.setCharacterEncoding("UTF-8");
    String name=request.getParameter("loginName");
    String pwd = request.getParameter("loginPw");
    System.out.println("Form_GET:name"+name+"&&pwd"+pwd);
    printJson(response,"name");
    return null;
    }
    @RequestMapping(value = "/LoginPost", method = RequestMethod.POST)
    public JSONObject LoginPost( HttpServletRequest request,
    HttpServletResponse response) throws IOException {
    response.setCharacterEncoding("UTF-8");
    String name=request.getParameter("loginName");
    String pwd = request.getParameter("loginPw");
    System.out.println("Form_POST:name"+name+"&&pwd"+pwd);
    printJson(response,"name");
    return null;
    }
    private void printJson(HttpServletResponse response, String jsonStr) {
    try {
    response.setContentType("application/json;charset=UTF-8");
    response.getWriter().print(jsonStr);
    } catch (Exception e) {
    e.printStackTrace();
    }
    }
    }

    get和post共四种情况、哈哈。不足之处多多包涵。时间匆忙只是自己进行验证没问题,没有进行更深的丰富,比如asp.net的web接口也包涵进来,用soap协议,进行json和xml数据通信等。大家自己丰富吧

    展开全文
  • 以前我很怕,很怕担负责任,但是从与女友分手,到步入社会,工作的打击,压力,虽然不久,我还是心里沉住了气,仔细去听项目经理提的需求,这次的需求是:用webservice制作一个接口,另一个系统访问就能返回json数据...
  • 第一种(推荐) import io.swagger.annotations.ApiModel;...@ApiModel(value="返回信息映射类") public class ReturnResult { @ApiModelProperty(value="返回数据") private Object data; @ApiModelPr
  • restful接口处理返回json

    千次阅读 2018-07-13 11:09:58
    针对前后端分离时,返回给前端的json格式的数据需要处理 处理规则 String类型由null修改为返回“” List类型由null修改为[ ] 实现源码 import org.aspectj.lang.annotation.AfterReturning; import org....
  • 第一次使用POST形式传JSON字符串,怎么都调不到后台方法,只是因为注解没加对…… CXF的WebService接口类 package com.zit.webservice.main; import javax.jws.WebService; import javax.ws.rs.Consumes; ...
  • 1:编写接口 package com.sh.daniel.controller; import java.util.ArrayList; import java.util.List; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind....
  • 这几天由于一个需求需要开发RestFul接口,在开发时过程中,Get请求比较简单也比较顺利,但时在开发Post请求,----客户端以JSON格式向服务端提交数据(客户端可能一次请求提交一条哦数据,也可能一次提价多条数据)时...
  • 下面内容基本翻译自如下文章:...在restful api开发中, 对于返回json数据, 如果属性值为空.,那么返回key=null好...
  • RestFul接口支持HAL和JSON格式

    千次阅读 2018-11-09 10:38:17
    关闭默认hal序列化选项,在配置文件中加上...此设定会使hateoas不再处理application/json的序列化,这样就可以针对application/json和application/hal+json分开处理。 在Controller的注解上指明支持json和hal两种...
  • package cn.soboys.core.ret; import lombok.Data; import java.io.Serializable; /** * @author kenx * @version 1.0 * @date 2021/6/17 15:47 * 统一API响应结果格式封装 ...}
  • 作用:将后台取到的数据以JSON或HTML的形式返回 package org.sun.com; import java.io.OutputStreamWriter; import java.io.PrintWriter; import javax.servlet.http.HttpServletResponse; import ...
  • Java数据接口编写简单例子,Java Web Json解析,服务端接口输出Json数据,客户端通过HTTP获取接口Json数据。 目前主流的CS结构,数据都是通过RESTful风格接口形式呈现,不管是桌面级应用程序还是手机端,接口是我们...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 39,886
精华内容 15,954
关键字:

restful接口返回json