我尝试通过Data JPA和Data Rest获得没有HATEOAS的实体。
条件是我使用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()
);
}
}
这是我的方式,但我希望会有更好的选择和模式。
问题是,我想知道这是否是最好的方法。
答案 0 :(得分:0)
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
}