Я пытаюсь найти лучший способ префикса моих остальных контроллеров.
Я следовал некоторым из способов, перечисленных в Как настроить префикс @RestController по умолчанию для всех контроллеров? .
Вот что я попробовал.
Я объявил аннотацию.
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.TYPE)
//@RestController
//@RequestMapping
public @interface ApiV1Prefix {
}
И добавил конфигурацию.
@Configuration
public class WebMvcConfig implements WebMvcConfigurer {
@Override
public void configurePathMatch(final PathMatchConfigurer configurer) {
configurer.addPathPrefix("/api/v1", HandlerTypePredicate.forAnnotation(ApiV1Prefix.class));
}
}
И это Кажется, работает, когда я использую его с моим контроллером отдыха.
@ApiV1Prefix
@RestController
@RequestMapping(path = "/categories)
public class CategoriesController {
public static LinkBuilder getLinkBuilderForSingle(final long id) {
return linkTo(CategoriesController.class).slash(id);
}
public static CategoryType addLinks(final CategoryType type) {
type.add(getLinkBuilderForSingle(type.getId()).withSelfRel());
type.add(getLinkBuilderForSingle(type.getId()).slash(PATH_VALUE_CATEGORIES).withRel(LINK_REL_CHILDREN));
return addLinksForAuditors(type);
}
}
Вот что я получил.
{
"content": [
{
"id": 1,
"createdAt": "2020-02-29T18:01:40.015821",
"updatedAt": "2020-03-03T23:56:38.051241",
"links": [
{
"rel": "self",
"href": "http://localhost:8080/categories/1"
},
{
"rel": "children",
"href": "http://localhost:8080/categories/1/categories"
}
]
}
]
}
Как видите, эти ссылки не применяются с префиксом.
Как я могу решить это? Должен ли я просто вручную добавить еще несколько .slash(...)
предложений?
Вот что я хочу.
{
"content": [
{
"id": 1,
"createdAt": "2020-02-29T18:01:40.015821",
"updatedAt": "2020-03-03T23:56:38.051241",
"links": [
{
"rel": "self",
"href": "http://localhost:8080/api/v1/categories/1"
},
{
"rel": "children",
"href": "http://localhost:8080/api/v1/categories/1/categories"
}
]
}
]
}