我们在写项目的时候,有很多时候会遇到用到消息的场景,但是有时候我们在接收消息的时候,明知道接受的消息的某些字段属于某些类型,但是在我们强转的时候就会报错,那是因为我们把它放进map的时候,他会自己再进行一次包装,所以有时候取值的时候会报错,下面是我就自己接受mq消息的时候遇到的两种消息体报错,来说一下消息体的字段转换!
首先是如果消息体里面含有DTO的时候,首先我们知道他是某种DTO,但是如果我们直接进行强转的话,会转换成空的DTO,如:
TestDTO testDTO =(TestDTO)map.get("testDTO");
这个时候我们获取到的DTO就有可能会变成空的,那么我们应该怎么办呢?
如下:
JSONObject jsonObject = (JSONObject) map.get("testDTO");
TestDTO testDTO = jsonObject.toJavaObject(TestDTO.class);
首先,我们要先将接受到的DTO转化为JSONObject,然后再将这个JSONObject转化为我们想要的DTO,就能够得到我们想要的DTO了。
还有一种就是我们想要的是某一种类型的字段,但是有可能经过消息的map封装之后,取出来就会报错:数据类型不一致,无法将某类型转化为某类型,如下:
BigDecimal bigDecimal = new BigDecimal(11);
testDTO =(BigDecimal)map.get("testDTO");
首先我们可以先new 一个该对象,然后把想要放的对象取出来放进去,如下:
new BigDecimal(map.get("hasReceived").toString());
这样我们就可以获取到想要的BigDecimal类型的数据了。