java - 如何创建具有多个“级别”的 Spring Boot API
问题描述
我的问题很简单,但我真的不知道如何解决它。
对不起,我什至不知道这些“级别”实际上是如何被调用的。孩子们?标签?此外,我在整个 API REST 和 Spring Boot 和 JPA 方面还是相当新的,比如我目前正在实习,几乎可以独自完成一些任务。但不管怎么说。
我希望我的 API 作为响应返回的是:
<base>
<level1>
<info1>
<something1>{database data}</something1>
<something2>{database data}</something2>
</info1>
</level1>
<level2>
<info2>
<something3>{database data}</something3>
</info2>
</level2>
</base>
但现在它通过 GET 请求返回的只是这个 XML:
<something1>{database data}</something1>
<something2>{database data}</something2>
<something3>{database data}</something3>
数据库数据来自我使用 JPA 获得的数据库中的单个表,而 something1、something2、something3 实际上是表列。
我正在使用 Spring Boot、JPA、Maven、Liquibase ......
有什么方法可以实现我想要的吗?获取level1,info1 ...如果是这样,如何?
这就是我获取 XML 的方式:
- 存储库是空的,只是扩展了 JPA:
@Repository
public interface AggregationDocumentRepository
extends JpaRepository<AggregationDocumentEntity, Long> {
}
- 服务:
public List<AggregationDocumentEntity> getAllAggregationDocuments() {
return aggregationDocumentRepository.findAll();
}
- 控制器:
@GetMapping(value = "/aggregation", produces = {"application/json", "application/xml"})
public List<AggregationDocumentEntity> getAllAggregationDocuments() {
List<AggregationDocumentEntity> allAggregationDocuments =
aggregationDocumentService.getAllAggregationDocuments();
if (allAggregationDocuments.size() == 0) {
log.error(
"Cannot return the agreggation documents: there is no aggregation documents in the database.");
} else {
log.info("Returned all aggregation documents in the database.");
}
return allAggregationDocuments;
}
我也有实体,它具有 16 个值的 getter 和 setter,它们是数据库的 16 列。
一切都很好。API 响应只需要具有这些“级别”。
先感谢您。
解决方案
因此,如果我理解正确,您只想更改 xml 表示模型,我使用 Jackson 依赖项来解决该问题:
<dependency>
<groupId>com.fasterxml.jackson.dataformat</groupId>
<artifactId>jackson-dataformat-xml</artifactId>
</dependency>
这是一个示例代码:
@JacksonXmlRootElement(localName = "students")
@Data
public class StudentsRepresentationModel {
@JsonProperty("student")
@JacksonXmlElementWrapper(useWrapping = false) // Usado para
@NonNull
private List<StudentModel> students;
}
带有 useWrapping = false 的 XML:
<students>
<student>
<id>1</id>
<name>John</name>
</student>
<student>
<id>2</id>
<name>Steven</name>
</student>
<students>
带有 useWrapping = true 的 XML:
<students>
<student>
<student>
<id>2</id>
<name>Steven</name>
</student>
<student>
<student>
<student>
<id>2</id>
<name>Steven</name>
</student>
<student>
<students>
如果您在文档中看到,您可以让您的 Wrapper 显示或不显示级别并更改它们的名称,在您的情况下,您将 JpaRepository 的方法实现获取到 XML 并列出它们但是如果您禁用它并使用创建另一个 Wrapper同样的服务,您可以完成这项工作!
推荐阅读
- android - android.intent.action.VIEW 和 mimeType 在清单中有“缺少 URL”错误
- visual-studio-2017 - 为什么我不能在 Windows 通用应用程序中引用 .Net Core 1.0 程序集?
- amazon-web-services - 单个 t2.micro 可以处理 40 多个用户的 nextcloud 吗?
- ms-access - Access 2016 代码正在插入重复记录
- c - Getopt:与多个 optargs 一起使用的标志
- javascript - 根据时间和创建日期对对象数组进行排序
- java - 在 Android 中使用 NameValuePair 发送长值
- r - 如何在 R Markdown 文档中自动包含文件路径
- javascript - 用于 jquery 的拖放移动响应式图像标记插件
- r - 为什么我一个人得到这个纽约输出?