Java 使用Lombok将JSON数组映射到POJO

Java 使用Lombok将JSON数组映射到POJO,java,json,lombok,Java,Json,Lombok,我看过类似的问题,但它似乎没有解决我的问题。 我有一个JSON负载,它是从我映射到POJO的假webservice调用返回的 JSON POJO-包装类 @Data @NoArgsConstructor @JsonInclude(JsonInclude.Include.NON_NULL) public class FieldsResponse { public List<FieldInfo> fields; } POJO没有被填充。如果我将包装器POJO中的项目更改为J

我看过类似的问题,但它似乎没有解决我的问题。 我有一个JSON负载,它是从我映射到POJO的假webservice调用返回的

JSON

POJO-包装类

@Data
@NoArgsConstructor
@JsonInclude(JsonInclude.Include.NON_NULL)
public class FieldsResponse {

    public List<FieldInfo> fields;

}
POJO没有被填充。如果我将包装器POJO中的项目更改为JsonArray,那么一切都可以正常工作(即:我可以正确地看到JSON响应)。我尝试过在包装器对象中初始化列表,也尝试过使用向量

有什么想法吗


ETA:如果我删除@jsonProperty(“field_one”)映射并将变量从fieldOne重命名为field_one,那么它就可以工作了。但这不是我想要的工作方式

下面的代码运行良好

版本:

13:14:42.344 [main] INFO  io.jeffmaxwell.stackoverflow.Q62195156 - fieldResponse: Q62195156.FieldsResponse(fields=[Q62195156.FieldInfo(fieldOne=one value, fieldTwo=two value), Q62195156.FieldInfo(fieldOne=one value, fieldTwo=two value)])
13:14:42.347 [main] INFO  io.jeffmaxwell.stackoverflow.Q62195156 - fields: Q62195156.FieldsResponse(fields=[Q62195156.FieldInfo(fieldOne=one value, fieldTwo=two value), Q62195156.FieldInfo(fieldOne=one value, fieldTwo=two value)])
13:14:42.349 [main] INFO  io.jeffmaxwell.stackoverflow.Q62195156 - fieldInfo0: Q62195156.FieldInfo(fieldOne=one value, fieldTwo=two value)
13:14:42.351 [main] INFO  io.jeffmaxwell.stackoverflow.Q62195156 - fieldInfo1: Q62195156.FieldInfo(fieldOne=one value, fieldTwo=two value)
  • 采用OpenJDK 14
  • 月食:2020-03(4.15.0)
  • junit:5.6.2
  • log4j2:2.13.3
  • 杰克逊:2.11.0
  • 龙目岛:1.18.12
导入静态org.junit.jupiter.api.Assertions.assertEquals;
导入静态org.junit.jupiter.api.Assertions.assertNotNull;
导入java.util.List;
导入org.junit.jupiter.api.Test;
导入com.fasterxml.jackson.annotation.JsonInclude;
导入com.fasterxml.jackson.annotation.JsonProperty;
导入com.fasterxml.jackson.core.JsonProcessingException;
导入com.fasterxml.jackson.databind.JsonMappingException;
导入com.fasterxml.jackson.databind.ObjectMapper;
导入龙目数据;
导入lombok.extern.log4j.Log4j2;
@Log4j2
公开课Q62195156{
//@formatter:off
静态最终字符串JSON=“{\'fields\”:[{\'field\'u one\':\'one value\',\'field\'u two\':\'two value\',{\'field\'u one\':\'one value\',\'field\'u two\':'two value\'}”;
//@formatter:on
静态最终ObjectMapper对象_MAPPER=新ObjectMapper();
@试验
void test()抛出JsonMappingException、JsonProcessingException{
var fieldsResponse=OBJECT_MAPPER.readValue(JSON,fieldsResponse.class);
LOGGER.info(“fieldResponse:{}”,fieldsResponse);
var fields=fieldsResponse.getFields();
LOGGER.info(“字段:{}”,字段响应);
assertNotNull(字段,“字段”);
var fieldInfo0=fields.get(0);
LOGGER.info(“fieldInfo0:{}”,fieldInfo0);
assertNotNull(fieldInfo0,“fieldInfo0”);
assertEquals(fieldInfo0.getFieldOne(),“一个值”,“fieldInfo0.getFieldOne()”;
assertEquals(fieldInfo0.getFieldTwo(),“两个值”,“fieldInfo0.getFieldTwo()”;
var fieldInfo1=fields.get(1);
LOGGER.info(“fieldInfo1:{}”,fieldInfo1);
assertNotNull(fieldInfo1,“fieldInfo1”);
assertEquals(fieldInfo1.getFieldOne(),“一个值”,“fieldInfo1.getFieldOne()”;
assertEquals(fieldInfo1.getFieldTwo(),“两个值”,“fieldInfo1.getFieldTwo()”;
}
@资料
@JsonInclude(JsonInclude.Include.NON_NULL)
静态类字段响应{
公共列表字段;
}
@资料
@JsonInclude(JsonInclude.Include.NON_NULL)
静态类字段信息{
@JsonProperty(“现场一号”)
私有字符串字段一;
@JsonProperty(“字段二”)
私有字符串字段2;
}
}
结果:

13:14:42.344 [main] INFO  io.jeffmaxwell.stackoverflow.Q62195156 - fieldResponse: Q62195156.FieldsResponse(fields=[Q62195156.FieldInfo(fieldOne=one value, fieldTwo=two value), Q62195156.FieldInfo(fieldOne=one value, fieldTwo=two value)])
13:14:42.347 [main] INFO  io.jeffmaxwell.stackoverflow.Q62195156 - fields: Q62195156.FieldsResponse(fields=[Q62195156.FieldInfo(fieldOne=one value, fieldTwo=two value), Q62195156.FieldInfo(fieldOne=one value, fieldTwo=two value)])
13:14:42.349 [main] INFO  io.jeffmaxwell.stackoverflow.Q62195156 - fieldInfo0: Q62195156.FieldInfo(fieldOne=one value, fieldTwo=two value)
13:14:42.351 [main] INFO  io.jeffmaxwell.stackoverflow.Q62195156 - fieldInfo1: Q62195156.FieldInfo(fieldOne=one value, fieldTwo=two value)

您使用什么进行Json反序列化?如何将Json字符串转换为pojo?让我们将此归结为用户错误。我一直在用错误的解码来伪装。我一直在用Gson。切换到Jackson的JacksonDecoder,现在工作正常。谢谢你的意见
13:14:42.344 [main] INFO  io.jeffmaxwell.stackoverflow.Q62195156 - fieldResponse: Q62195156.FieldsResponse(fields=[Q62195156.FieldInfo(fieldOne=one value, fieldTwo=two value), Q62195156.FieldInfo(fieldOne=one value, fieldTwo=two value)])
13:14:42.347 [main] INFO  io.jeffmaxwell.stackoverflow.Q62195156 - fields: Q62195156.FieldsResponse(fields=[Q62195156.FieldInfo(fieldOne=one value, fieldTwo=two value), Q62195156.FieldInfo(fieldOne=one value, fieldTwo=two value)])
13:14:42.349 [main] INFO  io.jeffmaxwell.stackoverflow.Q62195156 - fieldInfo0: Q62195156.FieldInfo(fieldOne=one value, fieldTwo=two value)
13:14:42.351 [main] INFO  io.jeffmaxwell.stackoverflow.Q62195156 - fieldInfo1: Q62195156.FieldInfo(fieldOne=one value, fieldTwo=two value)