RESTAPI在映射到Java对象时采用输入内容类型:application/x-www-form-urlencoded,如
public class MyRequest {
@JsonProperty("my_name")
private String myName;
@JsonProperty("my_phone")
private String myPhone;
//Getters and Setters of myName and myPhone.
}
在表单输入请求中,我正在设置my_name和my_phone的值,但MyRequest对象的myName和myPhone为null。
我正在使用Jackson annotations 2.3 jar
有什么建议吗?可能有什么问题?
我认为一个非常简单的解决方案,就是有一个与变量相关的setter,并带有“\u1”。
public class MyRequest {
@JsonProperty("my_name")
private String myName;
@JsonProperty("my_phone")
private String myPhone;
//Getters and Setters of myName and myPhone.
//Setters for application/x-www-form-urlencoded
public void setMy_name(String name) {
setMyName(name);
}
......
}
还有更多的解决方案。请参阅链接。
我有同样的问题最近使用SpringMVC和杰克逊!
在Spring中,当您显式地将endpoint配置为仅使用application/x-www-form-urlencoded
请求时,Spring能够序列化到您的POJO类中,但它不使用Jackson,因为它不是JSON。
因此,为了让这些Jackson注释使用POJO工作,您必须:
在我的例子中,使用Spring我可以用以下代码解决这个问题:
@RequestMapping(
value = "/rest/sth",
method = RequestMethod.POST
)
public ResponseEntity<String> create(@RequestBody MultiValueMap paramMap) { ... }
当您从@RequestMapping
注释中删除“consumes”属性时,您必须使用@RequestBody
,否则Spring将无法将您的映射识别为有效参数。
您可能会注意到,MultiValueMap
不是常规映射。每个元素值都是一个链接列表
,因为http表单数据可以重复值,因此这些值将添加到该链接列表中。
考虑到这一点,下面是一个简单的代码,用于获取第一个元素并创建另一个映射以转换为POJO:
HashMap<String, Object> newMap = new HashMap<>();
Arrays.asList(new String[]{"my_name", "my_phone"})
.forEach( k -> newMap.put(k, ((List<?>) paramMap.get(k)).get(0)));
MyRequest myrequest = new ObjectMapper().convertValue(newMap, MyRequest.class);
我希望它能帮助你它如何帮助我:)
问题内容: REST API映射到Java对象时,采用输入内容类型: 在表单输入请求中,我正在设置my_name和my_phone的值,但是MyRequest对象带有myName和myPhone作为空值。 我正在使用Jackson批注2.3 jar 有什么建议可能有什么问题吗? 问题答案: 我最近在使用SpringMVC和Jackson时遇到了同样的问题! 在Spring中,当您将端点显式配置为仅
问题内容: 我想上网本REST API,它接受三个参数: ,, 我做它像这样在AngularJS为: 但是我总是这样: 对象{数据:“ {”结果“:”假“}”“,状态:200,配置:对象,状态文本:”确定“,标头:功能} 要么 {“ data”:“ {\” result \“:\” false \“}”,“状态”:200,“ config”:{“方法”:“ POST”,“ transformReq
当内容类型不是text/html、text/plain或text/xml,而是application/x-www-form-urlencoded内容类型时,我很难理解如何设置字符集。 给出以下(简化的)javascript代码: 如果我没有显式设置编码, Firebug告诉我内容类型是"Application/x-www-form-urlencoded; charset=UTF-8"。 例如,如果
问题内容: 我曾经有ElasticSearch 5.2,并且刚升级到6.0。 我正在尝试按照此处的指南创建索引模板,但出现错误 我的查询是 问题答案: 要解决此问题,请添加curl选项 这个错误是由于 严格的内容类型检查 在ElasticSearch 6.0中引入,在解释这个岗位 从Elasticsearch 6.0开始,所有包含主体的REST请求也必须提供该主体的正确内容类型。
问题内容: 我已经将Elasticsearch(5.5版)集成到Gitlab中并尝试使用它。这是我从外部Windows客户端发送的命令: 但这不起作用。在客户端上,我得到以下错误: {“错误”:“不支持Content-Type标头[应用程序/ x-www-form-urlencoded]”,“状态”:406} curl:(6)无法解析主机:text curl:(3)[globbing ]第1列 c
感谢您就我在CXF REST提供商方面面临的以下问题提供建议。 我使用Apache CXF开发了REST web服务服务器。以下是合同定义。请注意,这是在Camel上下文中使用的。 以下是我的bean定义: 当我发送内容类型为“application/json”的请求时,一切正常。但当发送内容类型为“application/x-www-form-urlencoded”的请求时,请求会命中服务器,但