【问题标题】:springboot jackson returns array instead of proper json objectspringboot jackson返回数组而不是正确的json对象
【发布时间】:2016-10-23 14:38:41
【问题描述】:

我有以下控制器代码。

@RequestMapping(value = "/testService/test", produces = MediaType.APPLICATION_JSON_VALUE)
public HttpEntity<TestBean> test(@RequestParam Map<String,String> testReq)     {
...
List<Test> objList=testRepository.test();
testBean.setObjects(objList);
...
return new ResponseEntity<TestBean>(testBean, HttpStatus.OK);
}

TestBean 包含一个 Test 对象列表(带有 getter/setter 和一些其他属性),如下所示

private List<Test> objects;

测试类定义如下

@Entity
@Table(name="TEST")
@JsonIgnoreProperties(ignoreUnknown = true)
public class Test implements Serializable{
private static final long serialVersionUID = -5319848003675140194L;
@JsonIgnore
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
@Column(name="TEST_ID")
Integer testId;
...

test() 方法定义如下。

@Query(value="SELECT ...", nativeQuery=true)
List<Test> test();

我看到的json输出如下

{"requestId":"testRequestId","objects":[[1,"Test name"],[2,"Test name2"]],"status":"Success"}

其他都还好,我的问题是为什么对象列表是以这种方式输出的,而不是像这样输出的

{"testId":1,"testName":"Test name"}

对于我正在使用的另一个类似对象,我看到了预期的输出(以正确的 json 格式)。

请注意,我没有复制实际代码,而是键入了更改名称的代码,因此请忽略您在代码中可能看到的任何语法错误。

有人可以建议我如何在输出中获得正确的 json 吗?

【问题讨论】:

  • 我们需要更多关于您的TestTestBean 课程的信息。这些类中是否包含杰克逊注释?数组序列化发生在使用 BeanAsArraySerializer 时,如果您有某些 @JsonFormat 注释,则可能会激活它。
  • 尽管如此,您的 ID 也在该数组中,这很奇怪,因为您在 testId 字段上添加了 @JsonIgnore 注释(除非响应中的数字不同)。
  • 除了我已经提到的以外,Test 类上没有额外的注释。下面是 TestBean 上的唯一注释。 @JsonPropertyOrder({ "requestId", "objects" }) public class TestBean extends ResourceSupport {

标签: json spring-boot jackson output


【解决方案1】:

我有问题。问题是我使用的是为不同对象创建的 JPA 存储库类。 我为 Test 对象创建了一个新的 JPA 存储库类,现在它工作正常,我得到了正确格式的 json 输出。 谢谢

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-09-23
    • 2018-07-03
    • 2015-07-10
    • 2020-04-11
    • 2018-07-05
    • 1970-01-01
    相关资源
    最近更新 更多