Arian
Arian

Reputation: 7719

Setting Spring REST controllers base url without changing the static resources base url

I have a spring boot application with bunch of rest controllers (@RestController).

I use the following property in application.properties file to set the base url:

server.context-path=api

This property changes the base url for my static resources, too. I don't want them to change, how can I do that?

Note1 Why I want to do that? I want to serve a single page application (react app) on my server, and I want most of my requests made to /api/** to be authorized. I want all other GET requests to be handled by the react router. This is why I don't want the base URL for my static resources to change.

Upvotes: 8

Views: 21552

Answers (4)

Eric D. Soto
Eric D. Soto

Reputation: 1

Try this:

@RequestMapping(ControllerConstant.BASE_API_URL + "/audit")

where:

public class ControllerConstant {
    public static final String BASE_API_URL = "/whatever/api/v1";
}

This way the base URL is centralized in ControllerConstant.BASE_API_URL.

I hope this helps.

Upvotes: -1

vsoni
vsoni

Reputation: 2858

You can use

spring.data.rest.base-path=/api

in your application properties with

@BasePathAwareController 

on your controller class.

When you use

server.context-path=ctx

the context path applies to the whole application including

  • static resources
  • end points created with @Controller
  • end points created with @RestController
  • end points created with @BasePathAwareContoller
  • end points created with @RepositoryRestController
  • end points created with @RepositoryRestResource

When you use

spring.data.rest.base-path=/api

the prefix applies to

  • end points created with @BasePathAwareContoller
  • end points created with @RepositoryRestController
  • end points created with @RepositoryRestResource

And you can use both

server.context-path=ctx
spring.data.rest.base-path=/api

to apply a prefix like /ctx/api/

Upvotes: 11

Amr Alaa
Amr Alaa

Reputation: 543

You can define your path as a property in the .properties file and read it using the @Value annotation

example

in the application.properties

common.basepath = /test

in the controller use

@RequestMapping(@Value("${common.basepath}"))

Upvotes: 3

davidxxx
davidxxx

Reputation: 131346

You should not use this property as it changes the context path for the whole application.

Why not simply specify /api/yourResource in the RequestMapping annotation such as :

@RestController
@RequestMapping("/api/oneController")
public class OneController { ... }

.....

@RestController
@RequestMapping("/api/anotherController")
public class AnotherController { ... }

Upvotes: 15

Related Questions