Java之fastjson的简单使用

1.接口发送json格式的数据

 {
    "code": 1,
    "message": "成功",
    "rows": [
      {
        "latitude": "40.05068",
        "longitude": "116.305506",
        "placeName": "中国北京市海淀区软件园六号路",
        "createTime": 1576132004000
      }
    ],
    "pageNumber": 1,
    "pageSize": 15,
    "total": 1,
    "pageCount": 1
  }

2.创建Java对象与Json数据相对应上,可以使用GsonFormat插件把Json对象转为Java对象。

package com.hengke.project.data.api.domain;

import com.hengke.project.data.result.PageOutputDTO;
import lombok.Data;
import org.apache.poi.ss.formula.functions.T;

import java.util.List;

/**
 * @Author :Guo Shi Lin
 * @date : 2019/12/17 16:11
 * @description:设备轨迹返回实体类
 * @modified By:
 * @version: 1.0
 */
@Data
public class ApiResult<T> extends PageOutputDTO {
    /**
     * result : {"code":1,"message":"成功","rows":[{"latitude":"40.05068","longitude":"116.305506","placeName":"中国北京市海淀区软件园六号路","createTime":1576132004000}],"pageNumber":1,"pageSize":15,"total":1,"pageCount":1}
     */

/*    private ResultBean result;
    @Data*/
    /*public static class ResultBean<T> extends PageOutputDTO {*/
        /**
         * code : 1
         * message : 成功
         * rows : [{"latitude":"40.05068","longitude":"116.305506","placeName":"中国北京市海淀区软件园六号路","createTime":1576132004000}]
         * pageNumber : 1
         * pageSize : 15
         * total : 1
         * pageCount : 1
         */

        private int code;
        private String message;
        private List<T> rows;

       @Data
        public static class RowsBean {
            /**
             * latitude : 40.05068
             * longitude : 116.305506
             * placeName : 中国北京市海淀区软件园六号路
             * createTime : 1576132004000
             */
            private String latitude;
            private String longitude;
            private String placeName;
            private long createTime;
        }
    /*}*/
}

3.写个测试类测试一下

    @Test
    public void test1(){
        String message = "{\n" +
                "    \"code\": 1,\n" +
                "    \"message\": \"成功\",\n" +
                "    \"rows\": [\n" +
                "      {\n" +
                "        \"latitude\": \"40.05068\",\n" +
                "        \"longitude\": \"116.305506\",\n" +
                "        \"placeName\": \"中国北京市海淀区软件园六号路\",\n" +
                "        \"createTime\": 1576132004000\n" +
                "      }\n" +
                "    ],\n" +
                "    \"pageNumber\": 1,\n" +
                "    \"pageSize\": 15,\n" +
                "    \"total\": 1,\n" +
                "    \"pageCount\": 1\n" +
                "  }";
//        ApiResult<DeviceTrailOutputDTO> apiLocaltionResult = JSON.parseObject(message, new TypeReference<ApiResult<DeviceTrailOutputDTO>>(){});
        ApiResult<DeviceTrailOutputDTO> apiLocaltionResult = JSON.parseObject(message, ApiResult.class);
        List<DeviceTrailOutputDTO> rowsBeanList = apiLocaltionResult.getRows();
        rowsBeanList.forEach(deviceTrailOutputDTO -> {
            System.out.println(deviceTrailOutputDTO);
            System.out.println(deviceTrailOutputDTO.getPlaceName());
        });
    }

上面测试报错,错误信息如下:

java.lang.ClassCastException: com.alibaba.fastjson.JSONObject cannot be cast to com.hengke.project.data.result.DeviceTrailOutputDTO

	at java.util.ArrayList.forEach(ArrayList.java:1257)
	at com.hengke.project.data.api.service.JsomTest.test1(JsomTest.java:72)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
	at java.lang.reflect.Method.invoke(Method.java:498)
	at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:50)
	at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12)
	at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:47)
	at org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:17)
	at org.springframework.test.context.junit4.statements.RunBeforeTestExecutionCallbacks.evaluate(RunBeforeTestExecutionCallbacks.java:74)
	at org.springframework.test.context.junit4.statements.RunAfterTestExecutionCallbacks.evaluate(RunAfterTestExecutionCallbacks.java:84)
	at org.springframework.test.context.junit4.statements.RunBeforeTestMethodCallbacks.evaluate(RunBeforeTestMethodCallbacks.java:75)
	at org.springframework.test.context.junit4.statements.RunAfterTestMethodCallbacks.evaluate(RunAfterTestMethodCallbacks.java:86)
	at org.springframework.test.context.junit4.statements.SpringRepeat.evaluate(SpringRepeat.java:84)
	at org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:325)
	at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.runChild(SpringJUnit4ClassRunner.java:251)
	at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.runChild(SpringJUnit4ClassRunner.java:97)
	at org.junit.runners.ParentRunner$3.run(ParentRunner.java:290)
	at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:71)
	at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:288)
	at org.junit.runners.ParentRunner.access$000(ParentRunner.java:58)
	at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:268)
	at org.springframework.test.context.junit4.statements.RunBeforeTestClassCallbacks.evaluate(RunBeforeTestClassCallbacks.java:61)
	at org.springframework.test.context.junit4.statements.RunAfterTestClassCallbacks.evaluate(RunAfterTestClassCallbacks.java:70)
	at org.junit.runners.ParentRunner.run(ParentRunner.java:363)
	at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.run(SpringJUnit4ClassRunner.java:190)
	at org.junit.runner.JUnitCore.run(JUnitCore.java:137)
	at com.intellij.junit4.JUnit4IdeaTestRunner.startRunnerWithArgs(JUnit4IdeaTestRunner.java:68)
	at com.intellij.rt.execution.junit.IdeaTestRunner$Repeater.startRunnerWithArgs(IdeaTestRunner.java:47)
	at com.intellij.rt.execution.junit.JUnitStarter.prepareStreamsAndStart(JUnitStarter.java:242)
	at com.intellij.rt.execution.junit.JUnitStarter.main(JUnitStarter.java:70)

从上面的错误信息能看出来是因为JsonObect不能转为Java对象,然后上网查找文档,找到了解决的办法,用TypeReference来转就行了,代码如下:

    @Test
    public void test1(){
        String message = "{\n" +
                "    \"code\": 1,\n" +
                "    \"message\": \"成功\",\n" +
                "    \"rows\": [\n" +
                "      {\n" +
                "        \"latitude\": \"40.05068\",\n" +
                "        \"longitude\": \"116.305506\",\n" +
                "        \"placeName\": \"中国北京市海淀区软件园六号路\",\n" +
                "        \"createTime\": 1576132004000\n" +
                "      }\n" +
                "    ],\n" +
                "    \"pageNumber\": 1,\n" +
                "    \"pageSize\": 15,\n" +
                "    \"total\": 1,\n" +
                "    \"pageCount\": 1\n" +
                "  }";
        ApiResult<DeviceTrailOutputDTO> apiLocaltionResult = JSON.parseObject(message, new TypeReference<ApiResult<DeviceTrailOutputDTO>>(){});
//        ApiResult<DeviceTrailOutputDTO> apiLocaltionResult = JSON.parseObject(message, ApiResult.class);
        List<DeviceTrailOutputDTO> rowsBeanList = apiLocaltionResult.getRows();
        rowsBeanList.forEach(deviceTrailOutputDTO -> {
            System.out.println(deviceTrailOutputDTO);
            System.out.println(deviceTrailOutputDTO.getPlaceName());
        });
    }

输出信息:

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值