Wpis z mikrobloga

zainteresowałem się spring webflux oraz jego functional api i jakieś takie chu*owe to się wydaje, ale może mam do tego złe podejście? zamiast czytelnych deklaracji endpointów z jawnie zadeklarowanymi parametrami i zwrotką mam jakieś routingi i handlery bez jawnych typów. bez wczytywania się w kod nie wiadomo co jaki endpoint przyjmuje i co zwraca. to trochę tak jakby się cofnąć w czasie z typów generycznych do typów, które po prostu przechowują Object, a ty użytkownik się martw jak sprawdzić jaki to jest rzeczywiście typ. z drugiej strony to "nowe" (z mojej perspektywy) api zdaje się dawać większą elastyczność, tylko klepiąc proste endpointy w stylu REST czy RPC raczej nie odczuwałem potrzeby, żeby ta większa elastyczność była mi do czegoś potrzebna. tak więcej zamiast prostych i uporządkowanych kontrolerów teraz klepie się te routingi i handlery z masą boilerplate i uważa się to za krok w dobrą stronę? czy ja to dobrze rozumiem? czy to raczej fanaberia i większość nadal się używa zwykłych kontrolerów z adnotacjami?
#programowanie #spring #java
  • 3
  • Odpowiedz
czytelnych deklaracji endpointów z jawnie zadeklarowanymi parametrami


@ly000: a handler nie jest mocno typowany? Nie rozumiem gdzie jest problem. Możesz podać przykład z kodem?

RouterFunction<ServerResponse> route = route()
.GET("/person/{id}", accept(APPLICATION_JSON), handler::getPerson)
.GET("/person", accept(APPLICATION_JSON), handler::listPeople)
.POST("/person", handler::createPerson)
.build();

public class PersonHandler {
public Mono<ServerResponse> listPeople(ServerRequest request) {
}

public Mono<ServerResponse> createPerson(ServerRequest request) {
}

public Mono<ServerResponse> getPerson(ServerRequest request) {
}
}

Nie wiem co lepszego oferuje ci tradycyjny spring.

większość nadal się
  • Odpowiedz
@ly000: Ogólnie to bym chyba odpuścił webflux, bo wraz z nadejściem Project Loom (Java 21) mamy wirtualne wątki, które częściowo rozwiązują problemy które ma rozwiązywać webflux

  • Odpowiedz
  • 0
@Saly:

a handler nie jest mocno typowany? Nie rozumiem gdzie jest problem. Możesz podać przykład z kodem?

no nie jest w tym sensie, że masz ServerResponse i ServerRequest, które mogą przechowywać wszystko. musisz się wczytać w definicję metody, żeby sprawdzić czego oczekuje dany endpoint i co zwraca.

w podejściu z kontrolerem miałbyś coś w tym stylu:

public class PersonController {
public List<Person> listPeople() {
}

public Person createPerson(Person person) {
}
  • Odpowiedz