Can we use spring HATEOAS on top of RouterFunction ? I imagine that we can specify the resource but what will be the equivalent of the linkto(Controller.class) ? or is there any equivalent to specify the link and use composition of RouterFunction
Using spring HATEOAS with spring webflux Functional Web Framework (reactor-netty)
2.9k views Asked by hba AtThere are 2 answers
Flavio Costa
On
Answer in January 2023: not yet.
Spring HATEOAS was originally built with Spring MVC in mind, so even WebFluxLinkBuilder relies on Controller annotations to build the resource links.
The RouterFunction interface has no methods that expose the underlying RequestPredicate, so there is no way to determine which path is associated with a given RouterFunction. Some method may be introduced in a future API to provide the needed access to that information out-of-the-box, without having to do something nasty like breaking encapsulation with Reflection. In the meantime, you'd probably need to consider centralizing all relevant RouterFunction creation (e.g. via a helper/util/custom builder class), so you can intercept all paths and the associated HandlerFunctions with some degree of confidence.
Yeah, when you use RouterFunctions, unfortunately Spring HATEOAS does not help creating the links, and it is challenging to reliably implement this functionality in a generic way based on the current WebFlux functional API.
Related Questions in JAVA
- I need the BIRT.war that is compatible with Java 17 and Tomcat 10
- Creating global Class holder
- No method found for class java.lang.String in Kafka
- Issue edit a jtable with a pictures
- getting error when trying to launch kotlin jar file that use supabase "java.lang.NoClassDefFoundError"
- Does the && (logical AND) operator have a higher precedence than || (logical OR) operator in Java?
- Mixed color rendering in a JTable
- HTTPS configuration in Spring Boot, server returning timeout
- How to use Layout to create textfields which dont increase in size?
- Function for making the code wait in javafx
- How to create beans of the same class for multiple template parameters in Spring
- How could you print a specific String from an array with the values of an array from a double array on the same line, using iteration to print all?
- org.telegram.telegrambots.meta.exceptions.TelegramApiException: Bot token and username can't be empty
- Accessing Secret Variables in Classic Pipelines through Java app in Azure DevOps
- Postgres && statement Error in Mybatis Mapper?
Related Questions in SPRING
- HTTPS configuration in Spring Boot, server returning timeout
- Multi Tenancy in Spring - Partitioned Data Approach
- How to create beans of the same class for multiple template parameters in Spring
- org.telegram.telegrambots.meta.exceptions.TelegramApiException: Bot token and username can't be empty
- Springboot: How to get an entity optional property and check null?
- How do I propagate the current SecurityContext to my @RabbitListener in Spring Boot?
- Spring's XML based bean configuration for Object Mapper's Case Insensitive property
- Failed to configure a DataSource: 'url' attribute is not specified and no embedded datasource could be configured. I'm using Postgresql
- springboot class org.hibernate.mapping.Bag cannot be cast to class org.hibernate.mapping.SimpleValue
- Issue while deploying JDK 17 and Spring 6 application in Tomcat 10.1.20
- Spring JPA Data Auditing - How to design it?
- Springframework test: Async not started
- Error: Cannot invoke "jakarta.servlet.http.HttpSession.getAttribute(String)" because "session" is null
- How does spring-retry determine which methods to retry when @Retryable is placed at the class level?
- problem with edge server registration in Eureka
Related Questions in SPRING-BOOT
- Multi Tenancy in Spring - Partitioned Data Approach
- I have created a spring boot application with spring data JPA, Rest ,oracle and i am getting this ORA-00933: SQL command not properly ended
- Springboot: How to get an entity optional property and check null?
- How to create jasper report in spring boot rest api with jpa
- JSON Body is Not Passing Certain Strings
- Unresolved reference error is showing up after adding the dgs codegen plugin successfully
- Transaction silently rolled back
- JPA buddy error when generating JPA Entities from DB
- Migrating Spring Boot 2 to 3 throws org.glassfish.jaxb.runtime.v2.runtime.IllegalAnnotationsException: 3 counts of IllegalAnnotationExceptions
- Hibernate SQL Error: Missing FROM-clause entry for table "th1_1"
- Appwrite and / or Spring Boot Backend
- Failed to configure a DataSource: 'url' attribute is not specified and no embedded datasource could be configured. I'm using Postgresql
- Driver com.microsoft.sqlserver.jdbc.SQLServerDriver claims to not accept jdbcUrl, ${SPRING_DATASOURCE_URL}: GitHub Actions
- springboot class org.hibernate.mapping.Bag cannot be cast to class org.hibernate.mapping.SimpleValue
- Spring security causing 404 with message "No static resource login"
Related Questions in SPRING-HATEOAS
- How to serialize object to application/hal+json in Spring Boot Unit test?
- Spring HATEOAS relation link encoding
- How to prevent Spring boot from calling Hateoas org.springframework.hateoas.mvc.UriComponentsContributor
- Jackson convertValue with RepresentationModel objects
- Configure Spring-Hateoas in a Spring-Data-Rest application for non Rest components
- Model name mapping with Open API Code generator
- Target url placeholders missing after upgrading from spring-hateoas 1.3.5 to 2.1.2
- hateoas links are not properly creating after spring boot 3 upgrade
- How can I populate links to paged entities in Spring Boot?
- Rename "_embedded" to "data" or anything else in spring-hateoas
- Use case of HATEOAS between Angular frontend and Spring Boot
- How do I configure Spring Data REST to return links with templated ID such as users/{id}
- Spring hateoas could not resolve entity from URI when requestbody is List<EntityModel<Data1>> - Bulk Add
- linkTo(): Not enough variable values to expand when @RequestMapping("${app-controller.path}") comes from properties
- How to implement hateoas in Quarkus
Related Questions in SPRING-WEBFLUX
- How do you retrieve body from ClientResponse?
- WebClient apears to add headers to request on its own. Where does it happen?
- How to build a reactive application using React Query and Spring Webflux
- How can I make asserts on outbound HTTP requests?
- Spring Security Reactive OAuth2 Client: Options for Customizing Refresh Endpoint
- Spring ReactiveMongoRepository function with nested reactive operations timing out
- how to avoid handling `AbortedException` with Spring WebFlux while handling for generic Exceptions?
- Default /logout does not work if /login is customised spring security 5.7.11
- CompletableFuture: thenAccept called but whenComplete is not
- WebFlux is unable to decode Chunked requests properly
- getting error for Macbook Air M1 "Unable to load io.netty.resolver.dns.macos.MacOSDnsServerAddressStreamProvider, fallback to system defaults
- For Spring Boot Webclient, what is the preferred mechanism to log non-parseable responses?
- Should I use concatMap in reactive for DB call?
- Create webclient object based on changes in BaseURL & scope
- Reactive Spring Security is always creating the Session in redis even when NoOpServerSecurityContextRepository specified for securityContextRepository
Popular Questions
- How do I undo the most recent local commits in Git?
- How can I remove a specific item from an array in JavaScript?
- How do I delete a Git branch locally and remotely?
- Find all files containing a specific text (string) on Linux?
- How do I revert a Git repository to a previous commit?
- How do I create an HTML button that acts like a link?
- How do I check out a remote Git branch?
- How do I force "git pull" to overwrite local files?
- How do I list all files of a directory?
- How to check whether a string contains a substring in JavaScript?
- How do I redirect to another webpage?
- How can I iterate over rows in a Pandas DataFrame?
- How do I convert a String to an int in Java?
- Does Python have a string 'contains' substring method?
- How do I check if a string contains a specific word?
Trending Questions
- UIImageView Frame Doesn't Reflect Constraints
- Is it possible to use adb commands to click on a view by finding its ID?
- How to create a new web character symbol recognizable by html/javascript?
- Why isn't my CSS3 animation smooth in Google Chrome (but very smooth on other browsers)?
- Heap Gives Page Fault
- Connect ffmpeg to Visual Studio 2008
- Both Object- and ValueAnimator jumps when Duration is set above API LvL 24
- How to avoid default initialization of objects in std::vector?
- second argument of the command line arguments in a format other than char** argv or char* argv[]
- How to improve efficiency of algorithm which generates next lexicographic permutation?
- Navigating to the another actvity app getting crash in android
- How to read the particular message format in android and store in sqlite database?
- Resetting inventory status after order is cancelled
- Efficiently compute powers of X in SSE/AVX
- Insert into an external database using ajax and php : POST 500 (Internal Server Error)
By definition, you're creating a custom route and Spring
HATEOASis an opinionated set of frameworks meant so you don't have to lift a finger. What you are trying to do, and what SpringHATEOASis doing are contradictory. So, you will have to manually create the payload if you want embedded hyperlinks.Although, this shouldn't be too difficult if you set your owner content handler for your specific return type on that route.