java - jodd HttpRequest 表单设置的内容类型无效

标签 java httprequest jodd

HttpRequest 设置表单内容类型无效

@Test
public void getImgCode() {
    Map<String, Object> param = new HashMap<>();
    param.put("userId", "11111");
    HttpRequest request = HttpRequest.post(baseUrl + "openapi/api/v2/getCode")
            .header("content-type","application/json;charset=utf-8")
            .form(param);

    System.out.println(request.contentType());

    HttpResponse response = request.send();
    System.out.println(response.bodyText());
}

but print content-type = application/x-www-form-urlencoded;charset=utf-8

如果使用httpQequest.query(param)那么没问题,但只查询支持字符串。

最佳答案

简短回答:如果您使用form(),您将无法更改请求的内容类型和内容长度。它是一种特殊的方法,用于在正文中发送编码为多部分或 url 编码方式的参数。这只是 HTTP 的规范:) 通过更改内容类型,您的服务器将收到不正确的请求:它需要 json 正文,而不是表单参数。

您可以通过两种方式解决此问题:

  1. 要么encode输入 JSON 并将其设置为 bodyText() 并使用 application/json 内容类型;或
  2. 不要尝试更改内容类型并使用表单

如果您能解释为什么当此请求中不涉及 json 时需要将 content-type 的默认值更改为 JSON,将会很有帮助?

关于java - jodd HttpRequest 表单设置的内容类型无效,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45298937/

相关文章:

java - 在普通内存和字符串池中创建新字符串

Java KeyPressed - 如果其他键也被按下,则无法检测空格键是否被按下

c# - 需要在单元测试中向请求添加自定义 header

java - Sqlite + Jodd 正在用于插入数据、选择数据,但它不适用于使用 dboom 更新数据...我如何使用 dboom 实现..?

java - 获取维基百科类别链接

java - hibernate 事务未成功启动

java - 动态使用名称与其他数组中的值匹配的数组

c# - 从当前请求中获取应用程序 url

file-upload - 将附加元数据作为文件上传请求的一部分上传到 Google Cloud Storage