我试图将param值传递给Java Servlet,但返回的字符串不正确。我将值存储在Map中并检查密钥是否存在。
Map params;
params = request.getParameterMap();
String id = params.get("id").toString();
String data = params.get("data").toString();
System.out.println("streaming" + data + " with id of " + id);
然而,如果我通过http://localhost:8080/Serv/stream/data?data=hereisdata&id=you
调用此servlet,我的输出如下:
streaming[Ljava.lang.String;@5e2091d3 with id of [Ljava.lang.String;@36314ab8
我错过了什么?
编辑:由于建议的答案不起作用,我包括整个班级,因为我可能会在课堂上弄乱一些事情:
import java.util.*;
import javax.servlet.http.HttpServletRequest;
import Engine.Streamer;
public class AnalyzerController {
private Map params;
private String pathInfo;
private HttpServletRequest request;
public AnalyzerController(HttpServletRequest request)
{
this.params = request.getParameterMap();
this.pathInfo = request.getPathInfo();
}
public void processRequest()
{
System.out.println("procing with " + pathInfo);
switch(pathInfo){
case "/stream/data":
if(params.containsKey("id") && params.containsKey("data")) processStream();
break;
}
}
private void processStream()
{
System.out.println("we are told to stream");
String data = request.getParameter("data");
String id = request.getParameter("id");
Streamer stream = new Streamer();
stream.streamInput(data, "Analyzer", id);
}
}
这一行特别是抛出NPE:String data = request.getParameter("data");
答案 0 :(得分:2)
如果您查看Request#getParameterMap()
的文档,则会返回Map
类型的Map<String, String[]>
。因此,您需要从地图返回的值String[]
数组中取出第一个元素。
String id = params.get("id")[0];
当然,您可以避免所有这些,并使用Request#getParameter()
方法直接从请求对象中获取参数。
String id = request.getParameter("id");
编辑:查看您的类代码,似乎未初始化实例变量request
。在构造函数中初始化它,如下所示:
public AnalyzerController(HttpServletRequest request)
{
this.request = request; // Initialize your instance variable request which is used in the other methods.
this.params = request.getParameterMap();
this.pathInfo = request.getPathInfo();
}
答案 1 :(得分:2)
您可以获取所需的参数而不是整个地图
String id = request.getParameter("id");
String data = request.getParameter("data");
答案 2 :(得分:1)
尝试这样的事情。
String data = ((String)params.get("data"));
或直接来自请求。
String data = request.getParameter("data");
答案 3 :(得分:1)
您可以使用请求对象及其使用getParameter()
获取数据的方法,如果有多个数据来自页面,您可以使用getParameterValues()
。
String id = request.getParameter("id")
String data = request.getParameter("data")
为什么使用Map
?
有什么特殊需要或任何原因?
或者您可以这样使用:
String id = params.get("id")[0];