【问题标题】:What is the best way to get response without HATEOAS?在没有 HATEOAS 的情况下获得响应的最佳方式是什么?
【发布时间】:2019-05-16 06:37:17
【问题描述】:

我尝试在没有 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()
        );
    }
}

我就是这样做的,但我希望会有更好的选择和模式。

问题是,我想知道这是否是最好的方法。

【问题讨论】:

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


    【解决方案1】:

    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

    【讨论】:

    • 如果您要添加指向 DTO 的链接,那不是我想要的。在 Spring Data Rest 中,链接是自动附加的,所以我使用 DTO 来获取没有链接的 JSON。
    • 没有链接的 JSON?那么你将如何实现 HATEOAS
    • 已经用SDR实现了。正如我所说,当请求访问 SDR 中的存储库端点时,HATEOAS 会附加到响应中。如果我有任何误解,请告诉我。
    • 很抱歉,您能帮我解答一下您在这里问的具体问题吗?可能是我误会了。
    • 我想使用 SDR 将 HATEOAS 自动包含在实体响应中,在某些情况下没有 HATEOAS。因此,我从存储库端点单独创建了一个控制器,并创建了一个 DTO 类来将 Entitiy 转换为 DTO,这样我就可以在没有 HATEOAS 的情况下获得 JSON。在这篇文章中,我问的是我的代码是否是最好的。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-11-28
    • 2020-04-07
    • 2023-03-25
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多