我尝试在没有 HATEOAS 的情况下通过 Data JPA 和 Data Rest 获取实体。
条件是我用的是HATEOAS形式,有时候需要纯Json响应。
因此,我通过从存储库端点单独创建 Controller 路径并单独创建 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
}
关于java - 在没有 HATEOAS 的情况下获得响应的最佳方式是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56162245/