okhttp + fastjson 解析 json

本文详细介绍了如何使用Java设计和实现RESTful风格的API,包括接口通用结构、数据实体定义、HTTP请求示例及响应处理。通过具体代码示例展示了SimpleAjax类的使用,以及如何利用OkHttp进行GET和POST请求,并解析返回的JSON数据。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

参考:
https://www.cnblogs.com/liqipeng/p/9148545.html
https://blog.csdn.net/qq_34861144/article/details/82453431
https://segmentfault.com/q/1010000004025209

接口通用结构

package com.laolang.km.account.base.core;

import java.util.HashMap;
import java.util.Map;

import lombok.Data;

@Data
public class SimpleAjax<T> {

    public static final int CODE_SUCCESS = 200;
    public static final int CODE_FAIL = 400;
    public static final int CODE_OVERDUE = 400;
    public static final int CODE_ERROR = 500;
    public static final int CODE_FIXING = 502;


    /**
     * 接口请求结果的业务状态吗
     */
    private Integer code;

    /**
     * 判断接口请求是否成功的唯一标识
     */
    private Boolean success;

    /**
     * 提示信息
     */
    private String msg;

    /**
     * 数据体
     */
    private T body;

    /**
     * 扩充字段
     */
    private Map<String,Object> extra = new HashMap<>();
}

数据与实体

get

接口

http://localhost:3000/blog/catsys

{
    "success": true,
    "code": 200,
    "msg": "",
    "body": {"list": [
        {
            "id": 1,
            "name": "程序人生"
        },
        {
            "id": 2,
            "name": "编程语言"
        },
        {
            "id": 3,
            "name": "数据库"
        },
        {
            "id": 4,
            "name": "游戏开发"
        },
        {
            "id": 5,
            "name": "运维"
        }
    ]},
    "extra": {}
}

实体

package com.laolang.km.account.app.entity;

import java.util.List;

import lombok.Data;

@Data
public class BlogCatSys {


    private List<ListBean> list;

    @Data
    public static class ListBean {
        /**
         * id : 1
         * name : 程序人生
         */

        private int id;
        private String name;


    }
}

post

接口

http://localhost:3000/blog/catuser

{
    "success": true,
    "code": 200,
    "msg": "",
    "body": {
        "list": [
            {
                "id": 3,
                "name": "c++",
                "show": 1
            }
        ]
    },
    "extra": {}
}

实体

package com.laolang.km.account.app.entity;

import java.util.List;

import lombok.Data;

@Data
public class BlogCatUser {


    private List<ListBean> list;

    @Data
    public static class ListBean {
        /**
         * id : 3
         * name : c++
         * show : 1
         */

        private int id;
        private String name;
        private int show;


    }
}

FastJsonUtils

public static <T>SimpleAjax<T> converJsonToSimpleAJax(String json, Class<T> clazz){
    return JSONObject.parseObject(json, new TypeReference<SimpleAjax<T>>(clazz){});
}

OkHttpUtil

package com.laolang.km.account.base.util;

import com.laolang.km.account.base.core.SimpleAjax;

import java.io.IOException;

import okhttp3.Call;
import okhttp3.FormBody;
import okhttp3.Interceptor;
import okhttp3.OkHttpClient;
import okhttp3.Request;
import okhttp3.RequestBody;
import okhttp3.Response;

public class OkHttpUtil {

    private static final String LOG_TAG = "OkHttpUtil";


    private static OkHttpUtil instance;

    private final OkHttpClient client;

    private OkHttpUtil() {
        client = new OkHttpClient.Builder()
                .addInterceptor(new LoggingInterceptor())
                .build();
    }

    public static OkHttpUtil getInstance() {
        if (null == instance) {
            synchronized (OkHttpUtil.class) {
                if (null == instance) {
                    instance = new OkHttpUtil();
                }
            }
        }
        return instance;
    }

    public String get(String url, FormBody formBody) {
        Request request = new Request.Builder().url(url).method("GET", formBody).build();
        Call call = client.newCall(request);
        try {
            Response response = call.execute();
            if (response.isSuccessful()) {
                if (null != response.body()) {
                    return response.body().string();
                }
            }

        } catch (IOException e) {
            e.printStackTrace();
        }
        return null;
    }

    public String get(String url) {
        Request request = new Request.Builder().url(url).build();

        Call call = client.newCall(request);
        try {
            Response response = call.execute();
            if (response.isSuccessful()) {
                if (null != response.body()) {
                    return response.body().string();
                }
            }

        } catch (IOException e) {
            e.printStackTrace();
        }
        return null;
    }

    public <T> SimpleAjax<T> getSimpleAjax(String url, Class<T> clazz) {
        String json = get(url);
        if (null != json && json.length() > 0) {
            return FastJsonUtils.converJsonToSimpleAJax(json, clazz);
        }
        return null;
    }

    public <T> SimpleAjax<T> getSimpleAjax(String url, Class<T> clazz, FormBody formBody) {
        String json = get(url, formBody);
        if (null != json && json.length() > 0) {
            return FastJsonUtils.converJsonToSimpleAJax(json, clazz);
        }
        return null;
    }

    public String post(String url, FormBody formBody) {
        Request request = new Request.Builder().url(url).method("POST", formBody).build();
        Call call = client.newCall(request);
        try {
            Response response = call.execute();
            if (response.isSuccessful()) {
                if (null != response.body()) {
                    return response.body().string();
                }
            }

        } catch (IOException e) {
            e.printStackTrace();
        }
        return null;
    }

    public String post(String url) {
        Request request = new Request.Builder().url(url).build();

        Call call = client.newCall(request);
        try {
            Response response = call.execute();
            if (response.isSuccessful()) {
                if (null != response.body()) {
                    return response.body().string();
                }
            }

        } catch (IOException e) {
            e.printStackTrace();
        }
        return null;
    }

    public <T> SimpleAjax<T> postSimpleAjax(String url, Class<T> clazz) {
        String json = post(url);
        if (null != json && json.length() > 0) {
            return FastJsonUtils.converJsonToSimpleAJax(json, clazz);
        }
        return null;
    }

    public <T> SimpleAjax<T> postSimpleAjax(String url, Class<T> clazz, FormBody formBody) {
        String json = post(url, formBody);
        if (null != json && json.length() > 0) {
            return FastJsonUtils.converJsonToSimpleAJax(json, clazz);
        }
        return null;
    }


    class LoggingInterceptor implements Interceptor {

        @Override
        public Response intercept(Chain chain) throws IOException {
            Request request = chain.request();
            String method = request.method();
            RequestBody requestBody = request.body();
            Logger.d(LOG_TAG + " method:", method);
            Logger.d(LOG_TAG + " requestBody:", FastJsonUtils.convertObjectToJSON(request));
            Response response = chain.proceed(request);
            return response;
        }
    }
}

测试类

package com.laolang.km.account.base.util;

import android.support.test.runner.AndroidJUnit4;

import com.laolang.km.account.app.entity.BlogCatSys;
import com.laolang.km.account.app.entity.BlogCatUser;
import com.laolang.km.account.base.core.SimpleAjax;

import org.junit.Test;
import org.junit.runner.RunWith;

import java.io.IOException;

import okhttp3.FormBody;
import okhttp3.OkHttpClient;
import okhttp3.Request;
import okhttp3.Response;

@RunWith(AndroidJUnit4.class)
public class OkHttpUtilTest {

    @Test
    public void getTest(){
        String url = "http://localhost:3000/blog/catsys";
        OkHttpClient client = new OkHttpClient();
        Request request = new Request.Builder().url(url).build();
        try{
            Response response = client.newCall(request).execute();
            String result = response.body().string();
            System.out.println(result);
        }catch (Exception e){
            e.printStackTrace();
        }
    }

    @Test
    public void getTest2(){
        String url = "http://localhost:3000/blog/catsys";
        String json = OkHttpUtil.getInstance().get(url);
        SimpleAjax<BlogCatSys> ajax = FastJsonUtils.converJsonToSimpleAJax(json, BlogCatSys.class);
        System.out.println(ajax);
        for (BlogCatSys.ListBean bean : ajax.getBody().getList()) {
            System.out.println(bean);
        }
    }

    @Test
    public void postTest(){
        String url = "http://localhost:3000/blog/catuser";
        OkHttpClient client = new OkHttpClient();
        FormBody body = new FormBody.Builder().add("id","1").build();
        Request request = new Request.Builder().url(url).method("POST",body).build();
        try {
            Response response = client.newCall(request).execute();
            String json = response.body().string();
            SimpleAjax<BlogCatUser> ajax = FastJsonUtils.converJsonToSimpleAJax(json, BlogCatUser.class);
            for (BlogCatUser.ListBean bean : ajax.getBody().getList()) {
                System.out.println(bean);
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    @Test
    public void postTest2(){
        String url = "http://localhost:3000/blog/catuser";
        SimpleAjax<BlogCatUser> ajax = OkHttpUtil.getInstance().postSimpleAjax(url, BlogCatUser.class, new FormBody.Builder().add("id", "1").build());
        for (BlogCatUser.ListBean bean : ajax.getBody().getList()) {
            System.out.println(bean);
        }
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值