gpt4 book ai didi

spring - 如何在 Spring Boot 中获取请求 URL

转载 作者:行者123 更新时间:2023-12-04 02:52:10 24 4
gpt4 key购买 nike

我需要将请求 URL 作为 String 参数提交给方法

@RequestMapping(value = "/test", method = RequestMethod.POST)
public void testItt(@RequestParam String requestParameter, @RequestURL String requestUrl) {
// Do something with requestUrl
}

如何正确提交Request URL?

我尝试了 request.getRequestURL().toString()

但我觉得一定有更好的办法。

最佳答案

永远不要只从请求中获取 URL。这太容易了!编程应该很难,当它不难时,你就把它变得很难! :)

但是您可以按照上面显示的方式检索 URL

所以让我们从表示您要检索的值的注释开始

@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.PARAMETER)
public @interface RequestURL {
}

这将作为一种注入(inject)您已经有权访问的值(value)的方式。

接下来我们需要创建一个可以构建URL字符串的类

public class RequestUrlArgumentResolver
implements HandlerMethodArgumentResolver {

@Override
public boolean supportsParameter(MethodParameter methodParameter) {
return methodParameter.getParameterAnnotation(RequestURL.class) != null;
}

@Override
public Object resolveArgument(
MethodParameter methodParameter,
ModelAndViewContainer modelAndViewContainer,
NativeWebRequest nativeWebRequest,
WebDataBinderFactory webDataBinderFactory) throws Exception {

HttpServletRequest request
= (HttpServletRequest) nativeWebRequest.getNativeRequest();

//Nice and cozy at home surrounded by safety not obfuscation
return request.getRequestURL().toString();
}
}

接下来我们需要做的是让框架识别这个注释的处理程序。

将下面的方法添加到您的配置中(如果您的配置没有实现 WebMvcConfigurer,您可能需要实现此类或创建一个包含新配置的新配置)

...
@Override
public void addArgumentResolvers(
List<HandlerMethodArgumentResolver> argumentResolvers) {
argumentResolvers.add(new RequestUrlArgumentResolver());
}
...

最后我们回到你原来的请求映射,它应该像最初写的那样工作

@RequestMapping(value = "/test", method = RequestMethod.POST)
public void testItt(@RequestParam String requestParameter,
@RequestURL String requestUrl) {
// Do something with requestUrl
}

学分 - https://www.baeldung.com/spring-mvc-custom-data-binder

关于spring - 如何在 Spring Boot 中获取请求 URL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52842979/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com