我正在使用公共HttpClient对Spring servlet进行http调用.我需要在查询字符串中添加一些参数.所以我做了以下事情:
HttpRequestBase request = new HttpGet(url);
HttpParams params = new BasicHttpParams();
params.setParameter("key1", "value1");
params.setParameter("key2", "value2");
params.setParameter("key3", "value3");
request.setParams(params);
HttpClient httpClient = new DefaultHttpClient();
httpClient.execute(request);
Run Code Online (Sandbox Code Playgroud)
但是当我尝试使用servlet读取参数时
((ServletRequestAttributes) RequestContextHolder.currentRequestAttributes()).getRequest().getParameter("key");
Run Code Online (Sandbox Code Playgroud)
它返回null.实际上parameterMap是完全空的.当我在创建HttpGet请求之前手动将参数附加到url时,参数在servlet中可用.当我使用附加了queryString的URL从浏览器中访问servlet时也是如此.
这里的错误是什么?在httpclient 3.x中,GetMethod有一个setQueryString()方法来追加查询字符串.4.x中的等价物是什么?
经过大量的反复试验,我仍然无法弄清楚问题.JSP,servlet和数据库都被设置为接受UTF-8编码,但即使我在任何具有任何双字节字符的东西上使用request.getParameter,如em dash,它们也会被破坏为字符.
我已经手动提交数据库,它能够接受这些字符,没问题.如果我从servlet中的数据库中提取文本并将其打印在我的jsp页面的表单中,则显示没有问题.
唯一一次,当我尝试在使用request.getParameter检索它之后尝试将其显示在其他地方时,它发现它作为已损坏的字符返回.
有没有其他人有这个问题?我该如何解决?
我正在编写一些使用Apache HttpClient版本4.2.2来访问RESTful第三方API的Java代码.该API具有利用HTTP方法GET,POST,PUT和DELETE.重要的是要注意我使用的是4.xx版本,而不是3.xx,因为API从3变为4.我发现的所有相关示例都是针对3.xx版本.
所有API调用需要您提供api_key的参数(regardles哪种方法你正在使用).这意味着关于我是否正在进行GET,POST或其他方式,我需要提供此信息api_key以便对服务器端进行身份验证.
// Have to figure out a way to get this into my HttpClient call,
// regardless of whether I'm using: HttpGet, HttpPost, HttpPut
// or HttpDelete...
String api_key = "blah-whatever-my-unique-api-key";
Run Code Online (Sandbox Code Playgroud)
所以我试图找出如何提供HttpClient与api_key不顾我的请求方法(而这又取决于它的RESTful API方法,我试图打).它看起来HttpGet甚至不支持参数的概念,并HttpPost使用一些叫做的东西HttpParams; 但这些HttpParams似乎只存在于3.xx版本中HttpClient.
所以我问:什么是正确的,v4.2.2方式将我的api_key字符串附加/添加到所有四个:
HttpGetHttpPostHttpPutHttpDelete提前致谢.
我已经访问了HTML中关于UTF-8编码的每一个问题,似乎没有任何东西像预期的那样工作.
我添加了meta标签:没有改变.
我添加了accept-charset属性form:没有改变.
<%@ page pageEncoding="UTF-8" %>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8" />
<meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
<title>Editer les sous-titres</title>
</head>
<body>
<form method="post" action="/Subtitlor/edit" accept-charset="UTF-8">
<h3 name="nameOfFile"><c:out value="${ nameOfFile }"/></h3>
<input type="hidden" name="nameOfFile" id="nameOfFile" value="${ nameOfFile }"/>
<c:if test="${ !saved }">
<input value ="Enregistrer le travail" type="submit" style="position:fixed; top: 10px; right: 10px;" />
</c:if>
<a href="/Subtitlor/" style="position:fixed; top: 50px; right: 10px;">Retour à la page d'accueil</a>
<c:if test="${ …Run Code Online (Sandbox Code Playgroud)