gson 대상 봉인 분석

3969 단어
gson해석은 여러분에게 많은 편의를 열어주고 봉인하는 것도 간편합니다. 간단한 gson해석은 클라스나 type으로 직접 해석하면 됩니다.그러나 일반적인 서버 복귀 사용자 대상 봉인 여러 가지 문제 각종 구덩이

다음은 일반적인 gson 분석 서버가 되돌아오는 일반적인 방법입니다.


1. 클라이언트와 서버의 일반 gson 포맷은 고정된 포맷을 정의하여 인터페이스에서 통일적으로 처리할 수 있다. 예를 들어 아래와 같은 포맷일 수도 있고 데이터는array 수조[]일 수도 있고obj{}일 수도 있다.
{
    "code": "0000",
    "msg": " ",
    "t": [{
        "userid": "1",
        "userName": " "
    }, {
        "userid": "1",
        "userName": " "
    }]
}
{
    "code": "0000",
    "msg": " ",
    "data": {
        "userid": "1",
        "userName": " "
    }
}

2. 이런 데이터를 해석하면 일반적으로 모두가 데이터를 분리해서 해석하는데 만약에 수조라면 어떻게 해석하고 대상이라면 어떻게 해석한다.구체적인 이런 해석은 관련 문서를 볼 수 있다.분리해석은 수요를 충족시킬 수 있지만 해석 과정에 대해 한 걸음 더 나아가서 첫 번째 단계를 완성해야만 수조 여부를 판단할 수 있다. 이렇게 하면 효율에 영향을 미친다. 3. 사실은 범형과 범형의 한 방법을 이용하여 해석된 데이터 유형을 얻을 수 있다. 먼저 우리는 기초 대상인 봉인류를 먼저 얻는다.
abstract class  JsonModels  {



    private String msg;
    private String code;
    private T data;

     
    public String getMsg() {
        return msg;
    }
    public T getData() {
        return data;
    }

    public void setData(T data) {
        this.data = data;
    }

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

    public String getCode() {
        return code;
    }

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

     
     
    
    
}


우리는 다음 방법에 따라 t를 얻었다. t는 사실 전달된 대상의 User 또는List이다.
Type type = getClass().getGenericSuperclass();
Type[] t = ((ParameterizedType) type).getActualTypeArguments();

T를 얻으면 Type으로 어떻게 조립하나요?원본 코드를 보면 Type에 몇 개의 실현 클래스가 있습니다. Parameterized Type을 사용하고 이 클래스를 계승한 후에 jmodel과 t를 설정하면 됩니다.
class ParameterizedTypeImpl implements ParameterizedType {
    Type[] type;
    Class raw;

    @Override
    public Type[] getActualTypeArguments() {
        // TODO  
        return type;
    }

    @Override
    public Type getOwnerType() {
        // TODO  
        return null;
    }

    public ParameterizedTypeImpl(Type[] args, Class raw) {
        super();
        this.type = args != null ? args : new Type[0];
        this.raw = raw;
    }

    @Override
    public Type getRawType() {
        // TODO  
        return raw;
    }

저희가 json 해석을 Json Model에 직접 넣을 수 있어요.
public JsonModel toJsonModel(String json) {
        Type type = getClass().getGenericSuperclass();
        Type[] t = ((ParameterizedType) type).getActualTypeArguments();
        Type ty = new ParameterizedTypeImpl(t, JsonModel.class);
        return new Gson().fromJson(json, ty );
    }

----이 방법 getGeneric Superclass 호출은 반드시 Json Models가 추상적인 클래스이어야 합니다. 우리는 실현 클래스를 하나 더 씁니다. 실현 클래스는 빈 채로 아무것도 쓰지 않을 수 있습니다. 아래와 같습니다.
class JsonModel extends JsonModels{}

현재 기본류는 이미 다 썼으니 다음은 바로 호출하는 것이다.
    public static void main(String args[]) {
//      String json="{\"code\":\"0000\",\"msg\":\" \",\"data\":[{\"userid\":\"1\",\"userName\":\" \"},{\"userid\":\"1\",\"userName\":\" \"}]}";
        String json="{\"code\":\"0000\",\"msg\":\" \",\"data\":{\"userid\":\"1\",\"userName\":\" \"}}";
        JsonModel> j=new  JsonModel>().toJsonModel(json);
        
        System.out.println(j.getData());
    }

호출할 때 간단하지 않습니까? 기본적인 해석은 여기까지 왔습니다. 사실 포장의 관건은 다음과 같은 몇 가지 특성을 활용한 getGeneric Superclass, Parameterized Type입니다.

GitHub에서 전체 코드를 올렸습니다. 다운로드 환영합니다.


https://github.com/wbsh583/gsonutl

좋은 웹페이지 즐겨찾기