Spring hateaos RESTful API

0

Witam,

Jestem w trakcie budowania API restowego produkującego JSON+HAL.
Mam kilka pytań

  1. Czy powinienem mieć oddzielnie obiekty typu DTO, dokonywać najpierw mapowania encji na DTO, a później dopiero na Resource przy zwracaniu, czy też lepiej byłoby mieć tylko Resource zamiast DTO? Problem byłby wtedy z request body, bo też musiałbym stworzyć jakiś prosty POJO, na do którego będzie parsowany JSON. (poniżej screen)

screenshot-20190213105105.png

  1. Czy da się zmienić nazwę property w JSONIE? Chciałbym aby zamiast houseDTOList było po prostu houses czy coś takiego. Wiem, że mógłbym to zmienić zmieniając nazwę klasy np. na house - wtedy miałbym houseList w JSON, ale to też nie to o co mi chodzi.

screenshot-20190213105359.png

Na tą chwilę to by było tyle pytań :)

EDIT:
W sumie zadam jeszcze jedno pytanie.
Czy mając kontroler oznaczony przez @RestController w dobrym stylu jest zwracanie czasem ResponseEntity<T> ? Chodzi o to, że przy tworzeniu nowego obiektu POSTem chcę w nagłówku ustawiać link do utworzonego zasobu, zatem muszę mieć dostęp do HttpHeaders. Widziałem jakieś niskopoziomowe rozwiązania z użyciem HttpServletResponse, ale to chyba niezbyt dobry pomysł.

0
piotreekk napisał(a):

chcę w nagłówku ustawiać link do utworzonego zasobu

Jestem słaby w tym temacie, ale niedawno przeglądałem książeczkę i był tam taki przykład - może się przyda:
https://github.com/PacktPublishing/Spring-Microservices/blob/master/Chapter%202/chapter2.boothateoas/src/main/java/org/rvslab/chapter1/Application.java

0

Niestety nie na temat :/ Linki do zasobów j JSONie mi się dodają bez problemów (dzieje się to w tym przypadku w obiekcie assembler, który dodaje odpowiednie linki). Problem był przy dodawaniu nowego obiektu do bazy postem, bo wtedy zgodnie z REST API powinnismy zwracac w nagłówku Http link do utworzonego zasobu, a z poziomu @RestController nie ma jako tako dostępu do nagłówków http bez uzycia responseEntity.

Swoją drogą dziwne, że tyle osób wyświetliło post i nikt się nie wypowiedział... Czyżby społeczność springowa była tutaj tak nieliczna?

0

Zajrzałem do książki i jest tam jeszcze coś takiego, że może niby samo się robić, ale bezpośrednio z repository, przy czym znowu sam nie próbowałem i nie wiem, czy link będzie w nagłówku odpowiedzi HTTP:

CustomerRepository extends the standard JPA repository. This means
that all CRUD methods and default finder methods are automatically
implemented by the Spring Data JPA repository, as follows:

@RepositoryRestResource
interface CustomerRespository extends JpaRepository
<Customer,Long>{
Optional<Customer> findByName(@Param("name") String name);
}

The @RepositoryRestResource annotation enables the repository
access through RESTful services. This will also enable HATEOAS and HAL
by default. As for CRUD methods there is no additional business logic
required, we will leave it as it is without controller or component classes.
Using HATEOAS will help us navigate through Customer Repository
methods effortlessly.

https://github.com/PacktPublishing/Spring-Microservices/blob/master/Chapter%202/chapter2.bootcustomer/src/main/java/org/rvslab/customer/Application.java

1 użytkowników online, w tym zalogowanych: 0, gości: 1