springboot&maven:对后端使用自定义url路径会导致白标签错误

mdfafbf1  于 2021-07-14  发布在  Java
关注(0)|答案(2)|浏览(269)

我有两个独立的项目,一个projectapi(spring后端)和一个projectui(angular front)。我使用maven资源插件将它们组合到一个jar中进行生产。当我启动spring服务器时,这两个模块之间的连接工作正常。
现在我想自定义后端url路径,以便http://localhost:8088/登录“看起来像”http://localhost:8088/api/v1/login'。
通过在application.properties中添加以下条目,我可以做到这一点: spring.mvc.servlet-path=/api/v1 以及修改从ui到api的调用的基本url。
因为这个改变,我在调用ui时遇到了一个白标签错误(localhost:8088). 经过一番探索,我试图实现 WebMvcConfigurer 但这对我不起作用。这是参考stackoverflow链接。

// Application.java

@SpringBootApplication
@EnableJpaRepositories
public class Application {

    public static void main(String[] args) {
        SpringApplication.run(Application.class, args);
    }
}

// UserRestService.java

@RestController
@RequestMapping("/user")
@Produces(MediaType.APPLICATION_JSON)
@Consumes(MediaType.APPLICATION_JSON)
public class UserRestService extends AbstractRestService {
  ...
  @PostMapping("/login")
    public String login(@RequestBody User user) throws CustomException {
        return Response.ok(userService.loginUser(user, response));
    }
}

// application.properties

server.port=8088

// without that entry the post request works fine -> localhost:8088/user/login
// adding that entry and trying to call: localhost:8088/api/v1/user/login i get whitelabel error
spring.mvc.servlet.path=/api/v1
ghg1uchk

ghg1uchk1#

尝试将“/api/v1/”添加到控制器中,否则所有控制器都将以该路径作为前缀,并且您将无法提供具有相同应用程序的其他版本。

1bqhqjot

1bqhqjot2#

我更喜欢编程到一个接口。这有助于更好地利用国际奥委会。向接口添加uri前缀(/api/v1/),如下所示。它将把这个前缀附加到接口提供的所有方法上。

// Interface for UserRestService with URI prefix mentioned using Request mapping annotation
@RequestMapping(value = "/api/certs/", produces = { "application/json" },consumes = { "application/json" })
public interface IUserRestService {
  String login(User user) throws CustomException;
}

//UserRestService Class 
@RestController
@RequestMapping("/user", method = RequestMethod.POST)
public class UserRestService extends AbstractRestService implements IUserRestService{
  ...
  @PostMapping("/login")
    public String login(@RequestBody User user) throws CustomException {
        return Response.ok(userService.loginUser(user, response));
    }
}

相关问题