fastJson 범주 변환 방법

도입부
현재 맡은 업무는 json과 접촉이 비교적 많은데 최근에fastJson 프레임워크를 사용하여 json을 범용 대상으로 직렬로 전환하는 데 이상이 생겼습니다.
java.lang.ClassCastException
 
장면을 복원하려면 다음과 같이 하십시오.
모델 Result
public class Result {

    private String msg;
    
    private List module;

    public String getMsg() {
        return msg;
    }

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

    public List getModule() {
        return module;
    }

    public void setModule(List module) {
        this.module = module;
    }
    
    
}

왜 범형을 사용해야 하는지 이해할 수 있다. 범형은 임의의 유형을 받아들일 수 있고 일부 코드는 공용이다. 예를 들어 결과 집합과 같이 모든 구체적인 결과에 대해 하나의 모델을 정의할 수 없다. 예를 들어Result,Result 등이다.
public class User {

    private Long user_id;

    private String user_name;

    public User() {

    }

    public User(Long userId, String name) {
        this.user_id = userId;
        this.user_name = name;
    }

    public Long getUser_id() {
        return user_id;
    }

    public void setUser_id(Long user_id) {
        this.user_id = user_id;
    }

    public String getUser_name() {
        return user_name;
    }

    public void setUser_name(String user_name) {
        this.user_name = user_name;
    }

}

다음은 바로 범형의 전환을 보도록 하겠습니다.
    public static void main(String[] args) {
        
        Result r = new Result();
        
        r.setMsg("msg");
        
        List users = new ArrayList<>();
        users.add(new User(1L, "hehe"));
        users.add(new User(2L, "haha"));
        
        r.setModule(users);
        
        String js = JSON.toJSONString(r);
        
        System.out.println(js);
        
        Result obj = (Result)JSON.parseObject(js, Result.class);
        
        User user = obj.getModule().get(0);
        System.out.println(user);
    }
 
   

{"module":[{"user_id":1,"user_name":"hehe"},{"user_id":2,"user_name":"haha"}],"msg":"msg"}
 
   

Exception in thread "main" java.lang.ClassCastException: com.alibaba.fastjson.JSONObject cannot be cast to com.yuanmeng.json.User

 
   

at com.yuanmeng.json.fanxing.Client.main(Client.java:32)

 

 
fastjson 프레임워크의 TypeReference를 사용하면 json열을 정의된 범용 대상으로 변환할 수 있습니다
 
Result obj = (Result) JSON.parseObject(js, new TypeReference>(){});

 
 
 

좋은 웹페이지 즐겨찾기