Как я могу заставить HATEOAS работать для WebMvcConfigurer # configurePathMatch? - PullRequest
0 голосов
/ 14 марта 2020

Я пытаюсь найти лучший способ префикса моих остальных контроллеров.

Я следовал некоторым из способов, перечисленных в Как настроить префикс @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"
                }
            ]
        }
    ]
}
...