简体   繁体   中英

What is the best way to get response without HATEOAS?

I tried get entity by Data JPA & Data Rest without HATEOAS.

The condition is that I use the HATEOAS form, and sometimes I need a pure Json response.

So I'm creating JSON by creating the controller path separately from the repository's endpoint and creating the DTO class separately.

this is my code :

@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()
        );
    }
}

It's the way I do, but I expect there will be better options and patterns.

The question is, I wonder if this is the best way.

HATEOAS (Hypermedia as the Engine of Application State) is a constraint of the REST application architecture. It basically tells that anyone who is a consumer of your REST endpoints can navigate between them with the help of the link.

let take your example

**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}

Use org.springframework.hateoas.Links class to create such link in your DTOs.

in you DTO add

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

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM