FastJson安全问题解决

fastJson出现安全问题导致接口不接受请求,因此使用Gson替代fastJson做序列化、反序列化

Json转map和map转json

  package enumTest;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.Map.Entry;
import java.util.Set;

import com.google.gson.*;

/**
 * 使用Gson把json字符串转成Map
 */
public class JsonToMap {
    public static String model="{\"xiangkan\":{\"test\":{\"javascript\":\"https://ssl-cdn.static.browser.mi-img.com/feed/sdk/v2/miuibrowser.js\",\"css\":\"https://ssl-cdn.static.browser.mi-img.com/feed/sdk/v2/xknews.css\",\"errorPage\":\"https://feed.browser.miui.com/sdk/v2/terror.html\"},\"production\":{\"javascript\":\"https://ssl-cdn.static.browser.mi-img.com/feed/sdk/v2/miuibrowser.min.js\",\"css\":\"https://ssl-cdn.static.browser.mi-img.com/feed/sdk/v2/xknews.min.css\",\"errorPage\":\"https://feed.browser.miui.com/sdk/v2/error.html\"}},\"miuibrowser\":{\"test\":{\"javascript\":\"https://ssl-cdn.static.browser.mi-img.com/feed/sdk/v2/miuibrowser.js\",\"css\":\"https://ssl-cdn.static.browser.mi-img.com/feed/sdk/v2/miuibrowser.css\",\"errorPage\":\"https://feed.browser.miui.com/sdk/v2/terror.html\"},\"production\":{\"javascript\":\"https://ssl-cdn.static.browser.mi-img.com/feed/sdk/v2/miuibrowser.min.js\",\"css\":\"https://ssl-cdn.static.browser.mi-img.com/feed/sdk/v2/miuibrowser.min.css\",\"errorPage\":\"https://feed.browser.miui.com/sdk/v2/error.html\"}},\"newhome\":{\"test\":{\"javascript\":\"//static.mcc.miui.com/newhome/static/js/test.js\",\"css\":\"//static.mcc.miui.com/newhome/static/css/test.css\",\"errorPage\":\"//static.mcc.miui.com/newhome/static/error.html\"},\"production\":{\"javascript\":\"//static.mcc.miui.com/newhome/static/js/newhome.js\",\"css\":\"//static.mcc.miui.com/newhome/static/css/newhome.css\",\"errorPage\":\"//static.mcc.miui.com/newhome/static/error.html\"}}}";

    public static void main(String[] args) {
        Map map = new HashMap();
        map = toMap(model);
        System.out.println(map.get("newhome"));
        System.out.println(map2Json(RetCode.SUCCESS.toMap()));
    }
    
    /**
     * 获取JsonObject
     * @param json
     * @return
     */
    public static JsonObject parseJson(String json){
        JsonParser parser = new JsonParser();
        JsonObject jsonObj = parser.parse(json).getAsJsonObject();
        return jsonObj;
    }


    /**
     * Map对象转json字符串
     *
     */
    public static String map2Json(Map map){
        Gson gson = new Gson();
        return gson.toJson(map);
    }

    /**
     * 依据json字符串返回Map对象
     * @param json
     * @return
     */
    public static Map toMap(String json){
        return JsonToMap.toMap(JsonToMap.parseJson(json));
    }
    
    /**
     * 将JSONObjec对象转换成Map-List集合
     * @param json
     * @return
     */
    public static Map toMap(JsonObject json){
        Map map = new HashMap();
        Set> entrySet = json.entrySet();
        for (Iterator> iter = entrySet.iterator(); iter.hasNext(); ){
            Entry entry = iter.next();
            String key = entry.getKey();
            Object value = entry.getValue();
            if(value instanceof JsonArray){
                map.put((String) key, toList((JsonArray) value));
                System.out.println("走到array");
            }
            else if(value instanceof JsonObject){
                map.put((String) key, toMap((JsonObject) value));
                System.out.println("走到object");
            }
            else{
                map.put((String) key, value);
                System.out.println("走到string");
            }
        }
        return map;
    }
    
    /**
     * 将JSONArray对象转换成List集合
     * @param json
     * @return
     */
    public static List toList(JsonArray json){
        List list = new ArrayList();
        for (int i=0; i 
 

Enum枚举类型转json

枚举类型
    package enumTest;

import com.google.common.collect.ImmutableMap;

import java.util.Map;

public enum RetCode {
    SUCCESS(0, "success"),
    ERROR_DISASTER(20000, "The disaster is happening.");

    private int code;
    private String msg;

    public int getCode() {
        return code;
    }

    public void setCode(int code) {
        this.code = code;
    }

    public String getMsg() {
        return msg;
    }

    public void setMsg(String msg) {
        this.msg = msg;
    }


    private RetCode(int code, String msg) {
        this.code = code;
        this.msg = msg;
    }
    //添加此方法才能使用map序列化
    public Map toMap() {
        return ImmutableMap.builder()
                .put("msg", msg)
                .put("code", code)
                .build();
    }
}
上面的枚举类中添加toMap()方法
Retcode ret = isTrue ? RetCode.SUCCESS : RetCode.ERROR_DISASTER
//获取对应的json值
String res = JsonToMap.map2Json(result.toMap());

你可能感兴趣的:(FastJson安全问题解决)