- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我知道我做错了什么,但我正在努力弄清楚。请帮忙。
Jackson Json Conf Camel 蓝图 Spring:
<bean class="com.sage.entities.MyPojo" id="myPojo"/>
<dataFormats>
<json disableFeatures="FAIL_ON_UNKNOWN_PROPERTIES"
enableFeatures="ACCEPT_EMPTY_ARRAY_AS_NULL_OBJECT,ACCEPT_EMPTY_STRING_AS_NULL_OBJECT"
id="AJson2Pojo4"
library="Jackson" prettyPrint="true" unmarshalTypeName="com.sage.entities.MyPojo"/>
</dataFormats>
<unmarshal><custom ref="AJson2Pojo4"/></unmarshal>
我的故事:在某种程度上,我成功地反序列化了一个复杂的 JSON。此时我不知道我做错了什么。先感谢您。
我的POJO。这有效!但我需要更深入地了解内部类。
public class MyPojo{
private static final long serialVersionUID = 202003211122L;
public MyPojo() {}
private String httpStatus;
Payload PayloadObject;
ArrayList<Object> errorMessages = new ArrayList<Object>();
// Getter Methods
public String getHttpStatus() {
return httpStatus;
}
public Payload getPayload() {
return PayloadObject;
}
// Setter Methods
public void setHttpStatus( String httpStatus ) {
this.httpStatus = httpStatus;
}
public void setPayload( Payload payloadObject ) {
this.PayloadObject = payloadObject;
}
public class Payload {
ArrayList<Object> internalRecords = new ArrayList<Object>();
ArrayList<Object> records = new ArrayList<Object>();
ArrayList<Object> timeSeriesRecords = new ArrayList<Object>();
public ArrayList<Object> getTimeSeriesRecords(){
return timeSeriesRecords;
}
public void setTimeSeriesRecords(ArrayList<Object> timeSeriesRecords) {
this.timeSeriesRecords = timeSeriesRecords;
}
public ArrayList<Object> getInternalRecords(){
return internalRecords;
}
public ArrayList<Object> getRecords(){
return records;
}
public void setInternalRecords(ArrayList<Object> internalRecords) {
this.internalRecords = internalRecords;
}
public void setRecords(ArrayList<Object> records) {
this.records = records;
}
}
}
这有效,将 JSON 反序列化为此。这只是一个对象。
timeSeriesRecords: {name=706247, timestamps=[2020-06-05T08:28:59, 2020-06-05T08:53:17, 2020-06-05T10:55:34, 2020-06-05T12:57:43, 2020-06-05T14:57:44, 2020-06-04T22:37:16, 2020-06-04T23:05:51, 2020-06-05T01:07:29, 2020-06-05T03:07:31], data=[{name=flight_phase, data=[TAKEOFF, CRUISE, CRUISE, CRUISE, CRUISE, TAKEOFF, CRUISE, CRUISE, CRUISE], arraySizes=[9]}, {name=DPOIL, data=[null, -15.4604, -13.8422, -13.2137, -13.5186, null, -16.8422, -14.7853, -13.5696], arraySizes=[9]}, {name=POIL, data=[null, 72.4604, 69.8422, 69.2137, 69.5186, null, 69.8422, 67.7853, 67.5696], arraySizes=[9]}, {name=GN2MC, data=[null, 1.66469, 2.19799, 2.05127, 2.29911, null, 2.20363, 2.40703, 2.38929], arraySizes=[9]}, {name=DELN1, data=[6.23079, null, null, null, null, -0.370548], arraySizes=[6]}, {name=message_date_time, data=[2020-06-05T08:28:59, 2020-06-05T08:53:17, 2020-06-05T10:55:34, 2020-06-05T12:57:43, 2020-06-05T14:57:44, 2020-06-04T22:37:16, 2020-06-04T23:05:51, 2020-06-05T01:07:29, 2020-06-05T03:07:31], arraySizes=[9]}, {name=EGTHDM, data=[11.9738, null, null, null, null, -0.844012], arraySizes=[6]}, {name=SLOATL, data=[33.4591, null, null, null, null, 29.7589], arraySizes=[6]}, {name=IAIE, data=[0, 0, 0, 0, 0, 0, 0, 0, 0], arraySizes=[9]}, {name=GWFM, data=[null, 4.94427, 4.93224, 7.15636, 5.84145, null, 5.81955, 5.8618, 5.92097], arraySizes=[9]}, {name=IB, data=[0, 1, 1, 1, 1, 0, 1, 1, 1], arraySizes=[9]}, {name=SATSLF, data=[53.6306, null, null, null, null, 73.9836], arraySizes=[6]}, {name=PCN12, data=[103.357, 96.3, 93.3, 92.6, 92.8, 111.38, 93, 90.4, 89.9], arraySizes=[9]}, {name=BRAT, data=[0, 1, 1, 1, 1, 0, 1, 1, 1], arraySizes=[9]}, {name=TATSL, data=[16.6171, null, null, null, null, 28.2083], arraySizes=[6]}, {name=IAIWG, data=[0, 0, 0, 0, 0, 0, 0, 0, 0], arraySizes=[9]}, {name=DTAMB, data=[-2.98298, null, null, null, null, 8.32425], arraySizes=[6]}, {name=YN1MOD, data=[4, 4, 4, 4, 4, 4, 4, 4, 4], arraySizes=[9]}, {name=WBNOM, data=[0, 0, 0, 0, 0, 0, 0, 0, 0], arraySizes=[9]}, {name=VSVNOM, data=[null, 0, 0, 0, 0, null, 0, 0, 0], arraySizes=[9]}, {name=flight_report_id, data=[556612329, 556614998, 556624200, 556636413, 556647711, 556563236, 556565278, 556574200, 556586659], arraySizes=[9]}, {name=DELFN, data=[10.1342, null, null, null, null, -0.525884], arraySizes=[6]}, {name=SATSL, data=[12.017, null, null, null, null, 23.3242], arraySizes=[6]}, {name=DEGT, data=[null, -15.2332, -14.9595, -4.57673, -5.50067, null, -17.8259, -9.75815, -8.17455], arraySizes=[9]}, {name=PCN1K, data=[103.526, 101.35, 99.541, 99.5841, 99.0076, 109.264, 99.0255, 97.4138, 96.875], arraySizes=[9]}, {name=TATSLF, data=[61.9108, null, null, null, null, 82.7749], arraySizes=[6]}, {name=GEGTMC, data=[null, 42.2332, 41.9595, 31.5767, 32.5007, null, 44.8259, 36.7582, 35.1745], arraySizes=[9]}, {name=PCN12I, data=[104.3, 96.3, 93.3, 92.6, 92.8, 112.5, 93, 90.4, 89.9], arraySizes=[9]}, {name=GPCN25, data=[null, 2.63531, 2.10201, 2.24873, 2.00089, null, 2.09637, 1.89297, 1.91071], arraySizes=[9]}, {name=processed_date_time, data=[2020-06-05T08:29:22, 2020-06-05T08:53:54, 2020-06-05T10:56:41, 2020-06-05T12:59:12, 2020-06-05T14:58:32, 2020-06-04T22:37:38, 2020-06-04T23:06:44, 2020-06-05T01:08:04, 2020-06-05T03:10:15], arraySizes=[9]}]}
因此,timeSeriesRecords 存储为格式错误的 JSON - 如上所示。我需要访问内部记录、名称、数据等,现在所有这些都是格式错误的 JSON。我本来打算添加另一个 POJO,然后将其放入,但我不能,因为它是格式错误的 JSON。我还需要将其放入 POJO 中。
所以我在 JSON POJO 中创建了额外的类。因此,我将 POJO 更改为这样...添加了内部类来捕获所需的部分。
public class MyPojo {
private static final long serialVersionUID = 202003211122L;
public MyPojo() {}
private String httpStatus;
Payload PayloadObject;
ArrayList<Object> errorMessages = new ArrayList<Object>();
// Getter Methods
public String getHttpStatus() {
return httpStatus;
}
public Payload getPayload() {
return PayloadObject;
}
// Setter Methods
public void setHttpStatus( String httpStatus ) {
this.httpStatus = httpStatus;
}
public void setPayload( Payload payloadObject ) {
this.PayloadObject = payloadObject;
}
public class Data
{
@JsonProperty("name")
private String name;
@JsonProperty("arraySizes")
private ArrayList<Integer> arraySizes = new ArrayList<Integer>();
@JsonProperty("data")
private ArrayList<String> data = new ArrayList<String>();
public Data() {}
@JsonCreator(mode = JsonCreator.Mode.PROPERTIES)
public Data(@JsonProperty("name") String name,
@JsonProperty("arraySizes") ArrayList<Integer> arraySizes,
@JsonProperty("data") ArrayList<String> data) {
this.name = name;
this.arraySizes = arraySizes;
this.data = data;
}
public void setName(String name){
this.name = name;
}
public String getName(){
return this.name;
}
public void setArraySizes(ArrayList<Integer> arraySizes){
this.arraySizes = arraySizes;
}
public List<Integer> getArraySizes(){
return this.arraySizes;
}
public void setData(ArrayList<String> data){
this.data = data;
}
public List<String> getData(){
return this.data;
}
}
public class TimeSeriesRecords
{
@JsonProperty("name")
private String name;
@JsonProperty("timestamps")
private ArrayList<String> timestamps = new ArrayList<String>();
@JsonProperty("data")
private ArrayList<Data> data = new ArrayList<Data>();
@JsonCreator(mode = JsonCreator.Mode.PROPERTIES)
public TimeSeriesRecords(@JsonProperty("name") String name,
@JsonProperty("timestamps") ArrayList<String> timestamps,
@JsonProperty("data") ArrayList<Data> data) {
this.name = name;
this.timestamps = timestamps;
this.data = data;
}
public void setName(String name){
this.name = name;
}
public String getName(){
return this.name;
}
public void setTimestamps(ArrayList<String> timestamps){
this.timestamps = timestamps;
}
public List<String> getTimestamps(){
return this.timestamps;
}
public void setData(ArrayList<Data> data){
this.data = data;
}
public List<Data> getData(){
return this.data;
}
}
public class Payload {
ArrayList<Object> internalRecords = new ArrayList<Object>();
ArrayList<Object> records = new ArrayList<Object>();
ArrayList<TimeSeriesRecords> timeSeriesRecords = new ArrayList<TimeSeriesRecords>();
public ArrayList<TimeSeriesRecords> getTimeSeriesRecords(){
return timeSeriesRecords;
}
public void setTimeSeriesRecords(ArrayList<TimeSeriesRecords> timeSeriesRecords) {
this.timeSeriesRecords = timeSeriesRecords;
}
public ArrayList<Object> getInternalRecords(){
return internalRecords;
}
public ArrayList<Object> getRecords(){
return records;
}
public void setInternalRecords(ArrayList<Object> internalRecords) {
this.internalRecords = internalRecords;
}
public void setRecords(ArrayList<Object> records) {
this.records = records;
}
}
}
但现在我收到错误
Caused by: java.lang.IllegalArgumentException: Unrecognized Type: [null]
at com.fasterxml.jackson.databind.type.TypeFactory._constructType(TypeFactory.java:517)[123:com.fasterxml.jackson.core.jackson-databind:2.6.3]
at com.fasterxml.jackson.databind.type.TypeFactory.constructType(TypeFactory.java:470)[123:com.fasterxml.jackson.core.jackson-databind:2.6.3]
at com.fasterxml.jackson.databind.deser.BasicDeserializerFactory.constructCreatorProperty(BasicDeserializerFactory.java:842)[123:com.fasterxml.jackson.core.jackson-databind:2.6.3]
我尝试了几个小的变化,但是,我无法克服这个错误。
请告诉我我做错了什么。谢谢!
测试 JSON
{
"httpStatus": "OK",
"payload": {
"internalRecords": [],
"records": [
{
"name": "aircraft_id",
"arraySizes": [
412
],
"data": [
"3848",
]
},
{
"name": "engine_family",
"arraySizes": [
412
],
"data": [
"CFM56-7",
]
},
{
"name": "engine_type",
"arraySizes": [
412
],
"data": [
"CFM56-7B27E/B1F",
]
},
{
"name": "aircraft_type",
"arraySizes": [
412
],
"data": [
"B737-900ER",
]
}
],
"timeSeriesRecords": [
{
"name": "31340D",
"timestamps": [
"2018-12-17T19:37:18",
"2018-12-17T19:37:18",
"2018-12-17T20:13:18",
"2018-12-18T14:38:43"
],
"data": [
{
"name": "flight_phase",
"arraySizes": [
15
],
"data": [
"TAKEOFF",
"TAKEOFF",
"CRUISE",
"CRUISE",
"TAKEOFF",
"TAKEOFF",
"CRUISE",
"CRUISE",
"TAKEOFF",
"TAKEOFF",
"CRUISE",
"CRUISE",
"TAKEOFF",
"TAKEOFF",
"CRUISE"
]
},
{
"name": "message_date_time",
"arraySizes": [
15
],
"data": [
"2018-12-17T19:37:18",
"2018-12-17T19:37:18",
"2018-12-17T20:13:18",
"2018-12-17T22:30:36"
]
},
{
"name": "IAIE",
"arraySizes": [
15
],
"data": [
"0",
"0",
"0",
"0",
"0",
"0",
"0",
"0",
"0",
"0",
"0",
"0",
"0",
"0",
"0"
]
},
{
"name": "IB",
"arraySizes": [
15
],
"data": [
"1",
"1",
"1",
"1",
"1",
"1",
"1",
"1",
"1",
"1",
"1",
"1",
"1",
"1",
"1"
]
},
{
"name": "eposition",
"arraySizes": [
15
],
"data": [
1,
2,
1,
2,
1,
2,
1,
2,
1,
2,
1,
2,
1,
2,
2
]
},
{
"name": "IAIWG",
"arraySizes": [
15
],
"data": [
"0",
"0",
"0",
"0",
"0",
"0",
"0",
"0",
"0",
"0",
"0",
"0",
"0",
"0",
"0"
]
},
{
"name": "flight_report_id",
"arraySizes": [
15
],
"data": [
"389660813",
"389660814",
"389667535",
"389668530",
"389700831"
]
},
{
"name": "engine_serial_number",
"arraySizes": [
15
],
"data": [
"802222",
"802333",
]
},
{
"name": "processed_date_time",
"arraySizes": [
15
],
"data": [
"2018-12-17T19:38:04",
"2018-12-17T19:38:49",
"2018-12-17T20:15:22",
"2018-12-17T20:16:17",
"2018-12-17T22:03:29",
"2018-12-18T14:51:31"
]
}
]
}
]
},
"errorMessages": []
}
您好,好的,我找到了这个链接
http://www.cowtowncoder.com/blog/archives/2010/08/entry_411.html
我将内部类更改为静态,现在我不再收到错误了,引起原因:java.lang.IllegalArgumentException:无法识别类型:[null]
但现在我觉得自己更白痴了,我又打开书了:) -我不知道如何从另一个类访问静态类???我无法访问 Payload 类
到目前为止已经尝试过了,
AviationEntities4 ae =
exchange.getIn().getBody(AviationEntities4.class);
Payload pl = ae.getPayload();
String ok = ae.getHttpStatus();
log.info("HttpStatus: " + ok);
// AviationEntities4 payload = ae.getPayload();
// AviationEntities4.Payload payload = ae.getPayload();
// Payload pl = ae.getPayload();
再次非常感谢您花时间解决我的问题。
最佳答案
这个链接、文章、信息解决了我的问题,并更好地理解了内部类和 jackson 。
http://www.cowtowncoder.com/blog/archives/2010/08/entry_411.html
还有 2 条路要走,
它使用静态工作,并且将内部类作为自己的类工作,然后当然进行扩展。所以我选择了#2。它按预期工作。
谢谢COWTOWNCODER!!!
关于java - 我需要在 POJO 中反序列化具有多个类的复杂 JSON,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62225368/
我正在编写一个具有以下签名的 Java 方法。 void Logger(Method method, Object[] args); 如果一个方法(例如 ABC() )调用此方法 Logger,它应该
我是 Java 新手。 我的问题是我的 Java 程序找不到我试图用作的图像文件一个 JButton。 (目前这段代码什么也没做,因为我只是得到了想要的外观第一的)。这是我的主课 代码: packag
好的,今天我在接受采访,我已经编写 Java 代码多年了。采访中说“Java 垃圾收集是一个棘手的问题,我有几个 friend 一直在努力弄清楚。你在这方面做得怎么样?”。她是想骗我吗?还是我的一生都
我的 friend 给了我一个谜语让我解开。它是这样的: There are 100 people. Each one of them, in his turn, does the following
如果我将使用 Java 5 代码的应用程序编译成字节码,生成的 .class 文件是否能够在 Java 1.4 下运行? 如果后者可以工作并且我正在尝试在我的 Java 1.4 应用程序中使用 Jav
有关于why Java doesn't support unsigned types的问题以及一些关于处理无符号类型的问题。我做了一些搜索,似乎 Scala 也不支持无符号数据类型。限制是Java和S
我只是想知道在一个 java 版本中生成的字节码是否可以在其他 java 版本上运行 最佳答案 通常,字节码无需修改即可在 较新 版本的 Java 上运行。它不会在旧版本上运行,除非您使用特殊参数 (
我有一个关于在命令提示符下执行 java 程序的基本问题。 在某些机器上我们需要指定 -cp 。 (类路径)同时执行java程序 (test为java文件名与.class文件存在于同一目录下) jav
我已经阅读 StackOverflow 有一段时间了,现在我才鼓起勇气提出问题。我今年 20 岁,目前在我的家乡(罗马尼亚克卢日-纳波卡)就读 IT 大学。足以介绍:D。 基本上,我有一家提供簿记应用
我有 public JSONObject parseXML(String xml) { JSONObject jsonObject = XML.toJSONObject(xml); r
我已经在 Java 中实现了带有动态类型的简单解释语言。不幸的是我遇到了以下问题。测试时如下代码: def main() { def ks = Map[[1, 2]].keySet()
一直提示输入 1 到 10 的数字 - 结果应将 st、rd、th 和 nd 添加到数字中。编写一个程序,提示用户输入 1 到 10 之间的任意整数,然后以序数形式显示该整数并附加后缀。 public
我有这个 DownloadFile.java 并按预期下载该文件: import java.io.*; import java.net.URL; public class DownloadFile {
我想在 GUI 上添加延迟。我放置了 2 个 for 循环,然后重新绘制了一个标签,但这 2 个 for 循环一个接一个地执行,并且标签被重新绘制到最后一个。 我能做什么? for(int i=0;
我正在对对象 Student 的列表项进行一些测试,但是我更喜欢在 java 类对象中创建硬编码列表,然后从那里提取数据,而不是连接到数据库并在结果集中选择记录。然而,自从我这样做以来已经很长时间了,
我知道对象创建分为三个部分: 声明 实例化 初始化 classA{} classB extends classA{} classA obj = new classB(1,1); 实例化 它必须使用
我有兴趣使用 GPRS 构建车辆跟踪系统。但是,我有一些问题要问以前做过此操作的人: GPRS 是最好的技术吗?人们意识到任何问题吗? 我计划使用 Java/Java EE - 有更好的技术吗? 如果
我可以通过递归方法反转数组,例如:数组={1,2,3,4,5} 数组结果={5,4,3,2,1}但我的结果是相同的数组,我不知道为什么,请帮助我。 public class Recursion { p
有这样的标准方式吗? 包括 Java源代码-测试代码- Ant 或 Maven联合单元持续集成(可能是巡航控制)ClearCase 版本控制工具部署到应用服务器 最后我希望有一个自动构建和集成环境。
我什至不知道这是否可能,我非常怀疑它是否可能,但如果可以,您能告诉我怎么做吗?我只是想知道如何从打印机打印一些文本。 有什么想法吗? 最佳答案 这里有更简单的事情。 import javax.swin
我是一名优秀的程序员,十分优秀!