如何获得spring boot controller端点的完整url?

时间:2017-07-28 05:19:13

标签: spring url spring-boot controller endpoint

如何在没有concat / hardcode字符串的情况下获取特定的spring boot controller端点full url?我的情况是需要向外部URL发送请求并从中获取异步通知,因此我需要将我的通知端点完整URL传递给它。以下是示例代码:

    @RestController
    @RequestMapping("/api/v1")
    public class MyController {

       @PostMapping("/sendRequest")
       public void sendRequest() {
          ...
          // 1. get /notifyStatus endpoint full url to be send to external service
          String myNotificationFullUrl = xxx ?
          // 2. call external service
       }

       @GetMapping("/notifyStatus")
       public void notifyStatus() {
          ...
       }
    }

2 个答案:

答案 0 :(得分:1)

允许获取系统上的任何网址,而不仅仅是当前网址。

import org.springframework.hateoas.mvc.ControllerLinkBuilder
...
ControllerLinkBuilder linkBuilder = ControllerLinkBuilder.linkTo(methodOn(YourController.class).getSomeEntityMethod(parameterId, parameterTwoId))

URI methodUri = linkBuilder.Uri()
String methodUrl = methodUri.getPath()

还有更多方法可以更改主机名等。

答案 1 :(得分:0)

如果您不想要硬编码,也许可能的解决方案是添加一个包含所有消息和网址的messages.properties。然后,您可以配置Spring MessageSource并从该文件中获取您的URL。

假设您有一个带有以下属性的message.properties文件:

url=full_url_to_your_service

@Controller中,注入已配置的MessageSource以允许Spring解析消息:

 @Autowired
 private MessageSource messageSource;

然后你可以得到你的网址:

String url= messageSource.getMessage("url", put_here_your_locale);

如果您需要更多信息,请查看Spring doc以获取MessageSource。