我有一个API我正在测试。API接收POST请求并像这样读取它
StringBuffer jb = new StringBuffer();
String line = null;
try {
BufferedReader reader = request.getReader();
while ((line = reader.readLine()) != null)
jb.append(line);
System.out.println("jb: "+jb);
System.out.println("request.getHeader('content-type'): "+request.getHeader("content-type"));
} catch (Exception e) { /*report an error*/ }
当我在“application/json;charset=UTF-8”中发送一个POST请求时,所有工作都很好。
httpPost.setHeader("content-type", "application/json;charset=utf-8");
它打印如下:
jb: {"client_domain":"=....); //proper Json data
request.getHeader('content-type'): application/json;charset=utf-8
我可以正确地读取数据。
然而,我的问题是,当我以同样的方式发送数据时,我设置了内容类型“application/x-www-form-urlencoded;charset=utf-8”
httpPost.setHeader("content-type", "application/x-www-form-urlencoded;charset=utf-8");
测试是一样的,只是内容类型不同,但似乎我再也没有收到任何数据:
jb:
request.getHeader('content-type'): application/x-www-form-urlencoded;charset=utf-8
你知道吗?
///更新
这里是Spring控制器
@RequestMapping(value = {"user/add"}, method = RequestMethod.POST, produces="application/json; charset=utf-8")
@ResponseBody
public ResponseEntity<String> getNewUserApi(HttpServletRequest request,
HttpServletResponse response) throws Exception {
Map<String, Object> jsonObj = new HashMap<String, Object>();
StringBuffer jb = new StringBuffer();
String line = null;
try {
BufferedReader reader = request.getReader();
while ((line = reader.readLine()) != null)
jb.append(line);
System.out.println("jb: "+jb);
System.out.println("request.getHeader('content-type'): "+request.getHeader("content-type"));
} catch (Exception e) { /*report an error*/ }
///I create my JSon that will be sent back
return JsonUtils.createJson(jsonObj);
public static void main(String[] args) throws Exception {
String url = "http://localhost:8080/child/apiv1/user/add";
CloseableHttpClient client = HttpClientBuilder.create().build();
HttpPost httpPost = new HttpPost(url);
httpPost.setHeader("content-type", "application/x-www-form-urlencoded;charset=utf-8");
try {
//we had to the parameters to the post request
JSONObject json = new JSONObject();
json.put("client_id", "fashfksajfhjsakfaskljhflakj");
json.put("client_secret", "9435798243750923470925709348509275092");
json.put("client_domain", "dummy.localhost.com");
//create the user json object
JSONObject userObj = new JSONObject();
userObj.put("email", "johnsmith42@yopmail.com");
userObj.put("name", "Anna Sax");
JSONArray childrenArray = new JSONArray();
JSONObject child1 = new JSONObject();
child1.put("name", "Iphone 6");
child1.put("age", "2");
childrenArray.put(child1);
userObj.put("children", childrenArray);
json.put("user", childObj);
StringEntity params = new StringEntity(json.toString());
httpPost.setEntity(params);
System.out.println("executing request: " + httpPost.getRequestLine());
HttpResponse response;
response = client.execute(httpPost);
//[...]
} //End main
使用Spring时,request.getReader()
不能读取application/x-www-form-urlencoded
数据。相反,该数据可以作为参数使用,因此可以使用:
@PostMapping(path = "/mypostendpoint", consumes = "application/x-www-form-urlencoded")
public void handleFormData(HttpServletRequest request) {
Enumeration<String> params = request.getParameterNames();
while (params.hasMoreElements()) {
String param = params.nextElement();
System.out.println("name = " + param + ", value = " + request.getParameter(param));
}
}
您可以使用curl进行测试,例如:
curl-x POST http://localhost:8080/mypostendpoint-d'myparam1=x'-d'myparam2=y'
将打印
name = myparam1, value = X
name = myparam2, value = Y
或者,如果您预先知道可能的参数,您可以使用如下所示:
@PostMapping(path = "/mypostendpoint", consumes = "application/x-www-form-urlencoded")
public void handleMyPost(@RequestParam("myparam1") String value1,
@RequestParam("myparam2") String value2) {
System.out.println("value of myparam1 = " + value1);
System.out.println("value of myparam2 = " + value2);
}
我已经通过邮递员发送了标题Content-Type=Application/x-www-form-urlencoded的POST请求。 我得到了PHP中的数组,格式如下。我无法在PHP页面中访问。我该如何解决这个问题? 结果是
这是我的课。当我使用带有有效json的邮递员访问该url时http://localhost:8090/user 我犯了一个错误 我试过这个https://stackoverflow.com/a/38252762/11369236 我不想像这里这样使用requestparam https://stackoverflow.com/a/43065261/11369236 一些答案建议使用 但spring
@PostMapping public UserResponse createUser(@RequestBody UserRequest userDetail){ 这是我收到的错误代码 } 我尝试了很多不同的方法仍然没有得到解决方案这是来自邮递员的图片来自邮递员的图片
我以前有ElasticSearch 5.2,刚刚升级到6.0。 我试图创建一个索引模板以下指南在这里,但得到了错误 我的问题是
我正在使用OpenAPI生成器生成Spring REST API。下面是一个片段: 它生成一个Spring REST API方法(只是一个有趣的方法): 然后,我想使用从集成测试中调用它: 我得到一个错误: 我对服务器端进行了一点调试,看起来它需要一个多部分的内容,但我不明白为什么。 内容类型为application/x-www-form-urlencoded的Http Post请求在Spring
我正在尝试为我的网站创建一个简单的登录功能。我使用JAVA作为后端,并尝试使用restservices。我的学校给了我一个带有身份验证的登录系统的例子。不幸的是,我遇到了这个错误:java。lang.IllegalStateException:当请求实体的内容类型不是application/x-www-form-urlencoded]时,使用@FormParam。