首页 > 编程语言 >java.lang.IllegalStateException: Expected BEGIN_OBJECT but was STRING at line 1 column 2 path $

java.lang.IllegalStateException: Expected BEGIN_OBJECT but was STRING at line 1 column 2 path $

时间:2023-12-04 22:35:09浏览次数:36  
标签:lang BEGIN java String messageBody templateCode params mq public

java.lang.IllegalStateException: Expected BEGIN_OBJECT but was STRING at line 1 column 2 path $

package com.example.core.mydemo.scooterOrderSms;

import com.alibaba.fastjson.JSON;
import com.example.core.mydemo.json2.GsonUtils;
import com.google.gson.Gson;
import com.google.gson.GsonBuilder;
import org.apache.commons.lang3.StringUtils;

public class JSONTest {
    private static final Gson gson = new GsonBuilder().setDateFormat("yyyy-MM-dd HH:mm:ss").create();

    public static <T> T convertObj(String json, Class<T> cls) {
        if (StringUtils.isBlank(json)) {
            return null;
        }
        return gson.fromJson(json, cls);
    }

    public static void main(String[] args) {
        TemplateCodeSmsMq mq1 = new TemplateCodeSmsMq();
        mq1.setMobile("137XXXX1198");
        mq1.setTemplateCode("myTemplateId001");
        System.out.println("mq=" + JSON.toJSONString(mq1));


        //java.lang.IllegalStateException: Expected BEGIN_OBJECT but was STRING at line 1 column 2 path $
        //Expected BEGIN_OBJECT but was STRING at line 1 column 2 path $
        //"   Expected BEGIN_OBJECT but was STRING at line 1 column 2 path $
        String messageBody = "\"{\"mobile\":\"137XXXX1198\",\"params\":{\"expireDate\":\"2023-12-28\",\"plateNum\":\"测RGU269\",\"reportDateTime\":\"2023年11月28日\",\"url\":\"https://www.url.test\"},\"templateCode\":\"myTemplateId001\"}\"";

        System.out.println("messageBody=" + messageBody);
        TemplateCodeSmsMq mq = null;
        try{
            mq = GsonUtils.convertObj(messageBody, TemplateCodeSmsMq.class);
            System.out.println("mq=" + mq.toString());
        }catch (Exception e) {
            e.printStackTrace();
        }

        //转换之后
        if(messageBody.startsWith("\"") && messageBody.endsWith("\"")){
            messageBody = messageBody.substring(1,messageBody.length() - 1).replace("\\","");
        }
        System.out.println("messageBody22=" + messageBody);

        mq = GsonUtils.convertObj(messageBody, TemplateCodeSmsMq.class);

        System.out.println("mq=" + mq.toString());
    }
}
import java.util.Map;


public class TemplateCodeSmsMq {

    private String mobile;

    private String templateCode;

    private Map<String,Object> params;

    @Override
    public String toString() {
        return "TemplateCodeSmsMq{" +
                "mobile='" + mobile + '\'' +
                ", templateCode='" + templateCode + '\'' +
                ", params=" + params +
                '}';
    }

    public String getMobile() {
        return mobile;
    }

    public void setMobile(String mobile) {
        this.mobile = mobile;
    }

    public String getTemplateCode() {
        return templateCode;
    }

    public void setTemplateCode(String templateCode) {
        this.templateCode = templateCode;
    }

    public Map<String, Object> getParams() {
        return params;
    }

    public void setParams(Map<String, Object> params) {
        this.params = params;
    }
}

 

标签:lang,BEGIN,java,String,messageBody,templateCode,params,mq,public
From: https://www.cnblogs.com/oktokeep/p/17876182.html

相关文章

  • 无涯教程-Erlang - len函数
    该方法返回特定字符串的长度len-语法len(str)str  - 这是需要确定字符数的字符串。len-返回值返回值是字符串中的字符数。-module(helloLearnfk).-import(string,[len/1]).-export([start/0]).start()->Str1="Thisisastring1",Len1=len(Str......
  • 应用报错:java.lang.OutOfMemoryError: unable to create new native thread
    上个月生产环境忽然出现部分交易处理缓慢甚至超时,查看对应应用日志发现一直在刷报错日志,报错信息如下java.lang.OutOfMemoryError:unabletocreatenewnativethread从报错上来看是说不能创建本地线程了,应用都是容器部署的,开始我怀疑是容器内存不够了导致内存泄露,但经过查看容器......
  • Day19 Java 流程控制01:用户交互Scanner
    Java流程控制01:用户交互ScannerScanner对象之前我们学的基本语法中我们并没有实现程序和人的交互,但是Java给我们提供了这样一个工具类:Scanner类,可以通过它来获取用户的输入基本语法:Scannerscanner=newScanner(System.in);通过Scanner类的next()与nextLine()方......
  • Java 内存分析工具 Arthas 介绍与示例讲解
    目录一、概述二、Arthas安装三、Arthas主要组成结构四、Arthas通信主要流程五、Arthas快速入门讲解1)启动Arthas2)基础命令介绍3)jvm相关1、dashboard(实时数据面板)2、Thread(线程相关堆栈信息)3、jvm(查看当前JVM的信息)4、memory(查看JVM的内存信息)5、sysprop(查看/修改属性)6、s......
  • LeetCode-Java:55.跳跃游戏
    题目给你一个非负整数数组nums,你最初位于数组的第一个下标。数组中的每个元素代表你在该位置可以跳跃的最大长度。判断你是否能够到达最后一个下标,如果可以,返回true;否则,返回false。示例1:输入:nums=[2,3,1,1,4]输出:true解释:可以先跳1步,从下标0到达下标1,然后......
  • 黑马java基础简记
    day02——数据类型、运算符需要我们注意的是,随便写一个整数或者小数的字面量,它也是有默认数据类型的-比如23,它默认就为int类型;如果加上后缀L,则为long类型;-比如23.8,它默认为double类型;如果加上后缀F,则为float类型; //如果希望随便写一个整型字面量是long类型的,需要在其后......
  • 无涯教程-Erlang - Is_Integer函数
    该方法检查数字是否为整数值。Is_Integer-语法Is_Integer(X)X - 一个数字值。Is_Integer-返回值如果指定为参数的数字是Integer值,则返回值为true,否则将返回false。-module(helloLearnfk).-export([start/0]).start()->Num=3,io:fwrite("~w",[is_int......
  • Java学习之路(十二)
    Java学习之路(十二)1、时间日期类1.1、Date类(应用)计算机中时间原点1970年1月1日00:00:00时间换算单位1秒=1000毫秒Date类概述Date代表了一个特定的时间,精确到毫秒Date类构造方法方法名说明publicDate()分配一个Date对象,并初始化,以便它代表它被分......
  • 无涯教程-Erlang - Is_float函数
    该方法检查数字是否为浮点值。Is_float-语法Is_float(X)X - 一个数字值。Is_float-返回值如果指定为参数的数字为浮点型,则返回值为true,否则返回false。-module(helloLearnfk).-export([start/0]).start()->Num=3.00,io:fwrite("~w",[is_float(Num)]......
  • Java变量
     1.Java命名规则包名:全部小写,多单词.隔开aaa.bbb.ccccom.baidu.类名和接口:每个单词首字母大写大驼峰AaaBbbCcc变量名函数名小驼峰:换单词大写aaaBbbCccnextInt(){}左括号前不换行变量声明格式:数据类型变量名=初始值;=1.表示赋值,将右边的内容存入到左边......