如何在没有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() {
...
}
}
答案 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。