java - 在没有 HATEOAS 的情况下获得响应的最佳方式是什么?

标签 java spring-data-jpa spring-data-rest

我尝试在没有 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

}

https://www.baeldung.com/spring-hateoas-tutorial

关于java - 在没有 HATEOAS 的情况下获得响应的最佳方式是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56162245/

相关文章:

java - 如何在 JOOQ 中将 Record 转换为 Table Record?

java - Spring CrudRepository deleteAll() 什么都不做

mysql - Spring 启动 JPA : how do query a JSON column in a table

java - 新持久化后,之前持久化的数据总是会重叠

java - Spring Data Rest (SDR) 错误?持久实体不能为空

java - Spring 数据休息: Tracking data changes in history tables

java - Properties.loadFromXML NullPointerException 与 jUnit

java - 为什么在创建对象时调用构造函数?

java - REST ASSURED TEST 创建我自己的 given() 方法

Spring Data Rest 自定义参数解析器