问题描述
我的项目中有两个模块,我想在Web模块中获取一个httpServletRequest并通过使用feign将其发送到核心模块,以便对该核心模块中的请求进行一些处理。
分别是以下步骤:
网络模块控制器:
@RestController
@RequestMapping(value = ["/**"])
class WebController(val urlShortenerClient: UrlShortenerClient) {
val logger: Logger = LoggerFactory.getLogger(this.javaClass)
@GetMapping(produces = [MediaType.APPLICATION_JSON_VALUE])
fun getRedirectionUrl(httpServletRequest: HttpServletRequest): String {
logger.info("received url: ${httpServletRequest.requestURL}")
//*** this log appears and then error appears
return urlShortenerClient.getRedirectionUrl(httpServletRequest)
}
}
网络模块假装:
@FeignClient(value = "url-shortener",url = "http://localhost:8080")
interface UrlShortenerClient {
@RequestMapping(value = ["/url-shortener"],produces = [MediaType.APPLICATION_JSON_VALUE])
fun getRedirectionUrl(httpServletRequest: HttpServletRequest): String
}
核心模块控制器:
@RestController
@RequestMapping(value = ["/url-shortener"])
class UrlShortenerController(private val urlShortenerService: UrlShortenerService) {
private val logger: Logger = LoggerFactory.getLogger(this.javaClass)
@GetMapping(produces = [MediaType.APPLICATION_JSON_VALUE])
fun getRedirectionUrl(httpRequest: HttpServletRequest): String {
logger.info("received url in core controller: ${httpRequest.requestURL}")
return urlShortenerService.createUrlShortener(httpRequest)
}
}
但是当我通过邮递员发送get请求时,出现以下错误(通常,当要在网络控制器中调用伪客户端方法时,会出现错误):
2020-10-12 14:04:41.921 ERROR 20484 --- [nio-8080-exec-2] o.a.c.c.C.[.[.[/].[dispatcherServlet] : Servlet.service() for servlet [dispatcherServlet] in context with path [] threw exception [Request processing failed; nested exception is feign.codec.EncodeException: Error converting request body] with root cause
java.lang.StackOverflowError: null
at java.base/sun.net.util.IPAddressUtil.checkHostString(IPAddressUtil.java:460) ~[na:na]
at java.base/java.net.URLStreamHandler.setURL(URLStreamHandler.java:518) ~[na:na]
at java.base/java.net.URLStreamHandler.parseURL(URLStreamHandler.java:312) ~[na:na]
at java.base/sun.net.www.protocol.file.Handler.parseURL(Handler.java:67) ~[na:na]
at java.base/java.net.URL.<init>(URL.java:674) ~[na:na]
at java.base/java.net.URL.<init>(URL.java:541) ~[na:na]
at java.base/jdk.internal.loader.URLClassPath$FileLoader.getResource(URLClassPath.java:1219) ~[na:na]
at java.base/jdk.internal.loader.URLClassPath.getResource(URLClassPath.java:314) ~[na:na]
at java.base/jdk.internal.loader.BuiltinClassLoader.findClassOnClassPathOrNull(BuiltinClassLoader.java:695) ~[na:na]
at java.base/jdk.internal.loader.BuiltinClassLoader.loadClassOrNull(BuiltinClassLoader.java:621) ~[na:na]
at java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java:579) ~[na:na]
at java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(ClassLoaders.java:178) ~[na:na]
at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:522) ~[na:na]
at com.fasterxml.jackson.databind.ser.std.BeanSerializerBase.serializeFields(BeanSerializerBase.java:773) ~[jackson-databind-2.11.2.jar:2.11.2]
at com.fasterxml.jackson.databind.ser.BeanSerializer.serialize(BeanSerializer.java:178) ~[jackson-databind-2.11.2.jar:2.11.2]
at com.fasterxml.jackson.databind.ser.BeanPropertyWriter.serializeAsField(BeanPropertyWriter.java:728) ~[jackson-databind-2.11.2.jar:2.11.2]
at com.fasterxml.jackson.databind.ser.std.BeanSerializerBase.serializeFields(BeanSerializerBase.java:755) ~[jackson-databind-2.11.2.jar:2.11.2]
at com.fasterxml.jackson.databind.ser.BeanSerializer.serialize(BeanSerializer.java:178) ~[jackson-databind-2.11.2.jar:2.11.2]
at com.fasterxml.jackson.databind.ser.BeanPropertyWriter.serializeAsField(BeanPropertyWriter.java:728) ~[jackson-databind-2.11.2.jar:2.11.2]
at com.fasterxml.jackson.databind.ser.std.BeanSerializerBase.serializeFields(BeanSerializerBase.java:755) ~[jackson-databind-2.11.2.jar:2.11.2]
at com.fasterxml.jackson.databind.ser.BeanSerializer.serialize(BeanSerializer.java:178) ~[jackson-databind-2.11.2.jar:2.11.2]
at com.fasterxml.jackson.databind.ser.BeanPropertyWriter.serializeAsField(BeanPropertyWriter.java:728) ~[jackson-databind-2.11.2.jar:2.11.2]
at com.fasterxml.jackson.databind.ser.std.BeanSerializerBase.serializeFields(BeanSerializerBase.java:755) ~[jackson-databind-2.11.2.jar:2.11.2]
at com.fasterxml.jackson.databind.ser.BeanSerializer.serialize(BeanSerializer.java:178) ~[jackson-databind-2.11.2.jar:2.11.2]
at com.fasterxml.jackson.databind.ser.BeanPropertyWriter.serializeAsField(BeanPropertyWriter.java:728) ~[jackson-databind-2.11.2.jar:2.11.2]
at com.fasterxml.jackson.databind.ser.std.BeanSerializerBase.serializeFields(BeanSerializerBase.java:755) ~[jackson-databind-2.11.2.jar:2.11.2]
at com.fasterxml.jackson.databind.ser.BeanSerializer.serialize(BeanSerializer.java:178) ~[jackson-databind-2.11.2.jar:2.11.2]
at com.fasterxml.jackson.databind.ser.BeanPropertyWriter.serializeAsField(BeanPropertyWriter.java:728) ~[jackson-databind-2.11.2.jar:2.11.2]
at com.fasterxml.jackson.databind.ser.std.BeanSerializerBase.serializeFields(BeanSerializerBase.java:755) ~[jackson-databind-2.11.2.jar:2.11.2]
at com.fasterxml.jackson.databind.ser.BeanSerializer.serialize(BeanSerializer.java:178) ~[jackson-databind-2.11.2.jar:2.11.2]
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)