Java MockHttpServletRequest忽略设置字段,如何解决这个问题?

Java MockHttpServletRequest忽略设置字段,如何解决这个问题?,java,servlets,spring-test,Java,Servlets,Spring Test,我正在尝试为Tomcat应用程序测试servlet过滤器。为此,我使用Spring提供的MockHttpServletRequest 我是这样设置的: MockHttpServletRequest request = new MockHttpServletRequest(); request.setMethod("POST"); request.setRemoteHost("mycompany.com"); request.setRequestURI("/myapp.php"); request

我正在尝试为Tomcat应用程序测试servlet过滤器。为此,我使用Spring提供的MockHttpServletRequest

我是这样设置的:

MockHttpServletRequest request = new MockHttpServletRequest();
request.setMethod("POST");
request.setRemoteHost("mycompany.com");
request.setRequestURI("/myapp.php");
request.setSecure(true);
但当我看到以下情况时:

System.out.println(request.getRequestURL());
产生:
http://localhost/myapp.php
。另一方面,如果我显式请求设置的某个字段,如:

System.out.println(request.getRemoteHost());
我得到:
mycompany.com

这是怎么回事?如何获取
getRequestURL
以产生我真正想要的:
https://mycompany.com/myapp.php

您正在创建一个表示服务器上运行的servlet接收到的请求的

国家的javadoc

返回客户端或最后一个代理的完全限定名 已发送请求

因此,使用
setRemoteHost
设置的是发出请求的客户端的主机名/ip,而不是接收请求的服务器的主机名

你会想要的


Sotirios关于
serverName
remoteHost
的比较是正确的;然而,这种改变只能让你部分达到目的

以下内容将实现您的目标:

MockHttpServletRequest request = new MockHttpServletRequest();
request.setScheme("https");
request.setServerName("mycompany.com");
request.setServerPort(443);
request.setRequestURI("/myapp.php");

System.out.println(request.getRequestURL());
// Prints: https://mycompany.com/myapp.php
问候,

萨姆

MockHttpServletRequest request = new MockHttpServletRequest();
request.setScheme("https");
request.setServerName("mycompany.com");
request.setServerPort(443);
request.setRequestURI("/myapp.php");

System.out.println(request.getRequestURL());
// Prints: https://mycompany.com/myapp.php