java - 在没有 HATEOAS 的情况下获得响应的最佳方式是什么?
问题描述
我尝试在没有 HATEOAS 的情况下通过 Data JPA 和 Data Rest 获取实体。
条件是我使用HATEOAS形式,有时我需要一个纯Json响应。
因此,我通过与存储库的端点分开创建控制器路径并单独创建 DTO 类来创建 JSON。
这是我的代码:
@RepositoryRestController
public class MetricController {
@Autowired
private MetricRepository metricRepository;
@RequestMapping(method = RequestMethod.GET, value = "/metrics/in/{id}")
public @ResponseBody
MetricDTO getMetric(@PathVariable Long id) {
return MetricDTO.fromEntity(metricRepository.getOne(id));
}
}
@RepositoryRestResource
public interface MetricRepository extends JpaRepository<Metric, Long> { }
@Setter
@Getter
@NoArgsConstructor
@AllArgsConstructor
public class MetricDTO {
private SourceType sourceType;
private String metricTypeField;
private String metricType;
private String instanceType;
private String instanceTypeField;
private List<String> metricIdFields;
private List<String> valueFields;
private Map<String, String> virtualFieldValueEx;
public static MetricDTO fromEntity(Metric metric) {
return new MetricDTO(
metric.getSourceType(),
metric.getMetricTypeField(),
metric.getMetricType(),
metric.getInstanceType(),
metric.getInstanceTypeField(),
metric.getMetricIdFields(),
metric.getValueFields(),
metric.getVirtualFieldValueEx()
);
}
}
我就是这样做的,但我希望会有更好的选择和模式。
问题是,我想知道这是否是最好的方法。
解决方案
HATEOAS(作为应用程序状态引擎的超媒体)是 REST 应用程序架构的一个约束。它基本上告诉作为 REST 端点消费者的任何人都可以在链接的帮助下在它们之间导航。
举个例子
**HTTP Method** **Relation (rel)** **Link**
GET Up /metrics/in
GET Self /metrics/in/{id}
GET SourceType /sourceType/{id}
GET metricIdFields /url for each in JSON aarray
Delete Delete /employe/{employeId}
使用org.springframework.hateoas.Links
类在您的 DTO 中创建此类链接。
在你 DTO 添加
public class MetricDTO {
private Links links;
//Getters and setters
//inside your setters add SLEF , GET , create Delete for current resource
}
推荐阅读
- flutter - Flutter - 如何更改子小部件语言
- flutter - 在 Flutter 中的 FAB 上方显示 SnackBar / Toast
- c# - Podio C# 第一次使用 API 无法使用密码进行身份验证
- embedded-linux - uboot中的fatload mmc和bootm是什么意思?
- javascript - 超过“10000ms”的赛普拉斯命令超时
- javascript - 从对象数组添加标记
- amazon-web-services - 允许 CognitoUser 使用 AWS Lambda
- javascript - JSON Parse 错误:尝试从数组中解析对象时出现意外的标识符“未定义”(React-Native)
- react-native - 在 React Navigation v5 中重置返回路线
- function - 为什么我的 initState() 在构建小部件之前不调用使用 sharedprefs 的函数?