Spring boot REST API 返回列表/数组格式问题 [英] Spring boot REST API Returning a List/Array Formatting issue
问题描述
我正在开发基于 Spring Boot 的 Web 服务 API.我需要为 GET 响应返回一个事物列表 (ProductData).
I am developing spring boot based web services API. I need to return a list of things (ProductData) for the GET response.
这是响应的样子
<ProductDataList>
<ProductData>
<ProductData>...</ProductData>
<ProductData>...</ProductData>
<ProductData>...</ProductData>
</ProductData>
</ProductDataList>
但我不需要额外的
标签.我需要如下回复.
But I don't need the extra <ProductData>
tag.
I need the response as below.
<ProductDataList>
<ProductData>...</ProductData>
<ProductData>...</ProductData>
<ProductData>...</ProductData>
</ProductDataList>
知道为什么会生成额外的标签吗?
Any idea why an extra tag is generated?
我的 WebMvcConfig 文件中有以下内容.
I have below in my WebMvcConfig file.
@Bean
public MappingJackson2XmlHttpMessageConverter xmlConverter() {
Jackson2ObjectMapperBuilder builder = new Jackson2ObjectMapperBuilder();
builder.propertyNamingStrategy(PropertyNamingStrategy.
PascalCaseStrategy.PASCAL_CASE_TO_CAMEL_CASE);
builder.serializationInclusion(JsonInclude.Include.NON_EMPTY);
builder.failOnUnknownProperties(false);
MappingJackson2XmlHttpMessageConverter xmlConverter =
new MappingJackson2XmlHttpMessageConverter(builder.createXmlMapper(true).build());
return xmlConverter;
}
在我的控制器中我有
@RequestMapping(value = "/productdata")
@ResponseBody
public ProductDataList getProductData(@RequestParam final String[] ids) {
ArrayList<ProductData> products = productDataService.getProductData(ids);
ProductData[] pdArray = new ProductData[products.size()];
products.toArray(pdArray);
ProductDataList productDataList = new ProductDataList();
productDataList.setProductData(pdArray);
return productDataList;
}
这是我的 ProductDataList 类.
This is my ProductDataList class.
public class ProductDataList{
ProductData[] productData;
public ProductData[] getProductData() {
return productData;
}
public void setProductData(ProductData[] productData) {
this.productData = productData;
}
}
<小时>
编辑 1.
当我返回 ArrayList
时,响应是这样的.
When I return ArrayList<ProductData>
the response was like this.
<ArrayList>
<item>...</item>
<item>...</item>
<item>...</item>
</ArrayList>
编辑 2.添加注释 JsonTypeInfo
后,我取得了一些进展,但还没有达到我想要的.
Edit 2.
After adding annotation JsonTypeInfo
I made some progress, but not quite there to what I wanted.
@JsonTypeInfo(use = JsonTypeInfo.Id.NAME, include = JsonTypeInfo.As.PROPERTY)
public class ProductData {}
<ProductDataList>
<item _type="ProductData">...</item>
<item _type="ProductData">...</item>
<item _type="ProductData">...</item>
<ProductDataList>
推荐答案
经过一番努力,我终于解决了这个问题.关键是在对象中有 @JacksonXmlElementWrapper(useWrapping = false)
如上所述 在这个答案中
After some effort I was able to get this resolved. Key thing is to have @JacksonXmlElementWrapper(useWrapping = false)
in the Object as mentioned in this answer
@JacksonXmlRootElement(localName = "ProductDataList")
public class ProductDataList {
@JacksonXmlProperty(localName = "ProductData")
@JacksonXmlElementWrapper(useWrapping = false)
ProductData[] productDataArray = null;
public ProductData[] getProductDataArray() {
return productDataArray;
}
public void setProductDataArray(ProductData[] productDataArray) {
this.productDataArray = productDataArray;
}
}
现在响应看起来就像我想要的那样.
Now the response looks like just as I wanted to be.
<ProductDataList>
<ProductData>...</ProductData>
<ProductData>...</ProductData>
<ProductData>...</ProductData>
</ProductDataList>
这篇关于Spring boot REST API 返回列表/数组格式问题的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!