Custom endpoints
Custom endpoints are methods inside a controller class that may look as follows.
@RestController
@RequestMapping("/api/todoItems")
public class CustomEndpointController {
// ...
}
If you are using Kotlin, you should add the open
modifier to the class declaration.
For a controller to be recognized as a container for custom endpoints, it needs to fulfill the following criteria:
- It must have a
@RestController
and a@RequestMapping
annotation
Take note that the spring.data.rest.base-path
you specified in application.properties
will not be applied to the @RequestMapping
unless you also add the annotation @BasePathAwareController
.
You can then specify custom endpoints in such classes where parameters are annotated with @RequestParam
, @PathVariable
or @RequestBody
.
@RequestMapping("createOrUpdate", method = [RequestMethod.POST])
open fun createOrUpdateContact(
@RequestParam firstName: String,
@RequestParam lastName: String
): ResponseEntity<EntityModel<User>> {
// ...
}
FeGen will generate a method in the API client corresponding to the path
or value in @RequestMapping
if the backend method has a @RequestMapping
(or @GetMapping
, @PostMapping
, etc.) annotation.
Custom endpoints must have a void return type or return entities.
In the latter case, the entity class must be wrapped in an EntityModel
(if a single entity should be returned) or in CollectionModel
or PagedModel
(if multiple entities should be returned).
Those classes themselves must be wrapped in a ResponseEntity
.
Custom endpoints can also return pojos. In this case, a pojo or a list of those must be wrapped in a ResponseEntity
.
They may also respond with primitive values in the same way.
Returning String
is however not supported, since they will not be converted to a JSON string.
Instead, return a TextNode
wrapped in a ReponseEntity
.
To reliably use the returned values in the frontend, make sure you added the fegen-spring-util
dependency to your Spring project.