【发布时间】: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 吗?
【问题讨论】:
-
我们需要更多关于您的
Test和TestBean课程的信息。这些类中是否包含杰克逊注释?数组序列化发生在使用BeanAsArraySerializer时,如果您有某些@JsonFormat注释,则可能会激活它。 -
尽管如此,您的 ID 也在该数组中,这很奇怪,因为您在
testId字段上添加了@JsonIgnore注释(除非响应中的数字不同)。 -
除了我已经提到的以外,Test 类上没有额外的注释。下面是 TestBean 上的唯一注释。
@JsonPropertyOrder({ "requestId", "objects" }) public class TestBean extends ResourceSupport {
标签: json spring-boot jackson output