Java模型的JSON字段映射 [英] JSON field mapping for Java model
问题描述
发送的JSON:
JSON which is sent:
{
"Banner": "ABC"
}
Java模型:
Java model:
...
@JsonIgnoreProperties(ignoreUnknown = true)
@JsonSerialize(include = JsonSerialize.Inclusion.NON_NULL)
public class BannerData implements java.io.Serializable {
private static final long serialVersionUID = 5664846645733319592L;
@JsonProperty(value = "Banner")
private String banner;
public String getBanner() {
return banner;
}
public void setBanner(String banner) {
this.banner = banner;
}
}
控制器:
@RequestMapping(value = {"/GetBanner"}, method = RequestMethod.POST)
@ResponseBody
public ResponseEntity<String> enrollCustomer(@RequestBody BannerData body, HttpServletRequest request) throws Exception {
...
}
请求 / GetBanner
返回:
客户端发送的请求在语法上不正确。
工作正常当json更改为(小写命名为Java字段名称)时:
Works OK when json changed to (lowercase naming as is Java field name):
{
"banner": "ABC"
}
但是我需要 JSON 中的大写字段命名。
看起来像 @JsonProperty(值=横幅)
不起作用。
However I need uppercase field naming in JSON.
Looks like @JsonProperty(value = "Banner")
does not work.
映射是否正确?
推荐答案
也许你只是尝试:
@JsonProperty("Banner")
没有'value ='。我在我的项目中使用它,它实际上按预期工作。
without 'value ='. I used it in my project and it actually worked as expected.
更新
我刚刚创建了一些测试类来测试问题的行为。我做了什么:
I just created some test classes to test the bahaviour of your problem. What I have done:
import org.codehaus.jackson.annotate.JsonIgnoreProperties;
import org.codehaus.jackson.annotate.JsonProperty;
import org.codehaus.jackson.map.annotate.JsonSerialize;
@JsonIgnoreProperties(ignoreUnknown = true)
@JsonSerialize(include = JsonSerialize.Inclusion.NON_NULL)
public class BannerData implements java.io.Serializable {
private static final long serialVersionUID = 5664846645733319592L;
@JsonProperty("Banner")
private String banner;
public String getBanner() {
return banner;
}
public void setBanner(String banner) {
this.banner = banner;
}
}
读取json的另一个类:
Another class to read the json:
import org.codehaus.jackson.map.ObjectMapper;
import java.io.File;
import java.io.IOException;
public class BannerReader {
private static final String JSON_PATH = "pathToYourJson";
public BannerData readBanner() throws IOException {
ObjectMapper mapper = new ObjectMapper();
return mapper.readValue(new File(JSON_PATH), BannerData.class);
}
}
最后是入口点类:
import java.io.IOException;
public class BannerTest {
public static void main(String[] args) throws IOException {
BannerReader reader = new BannerReader();
BannerData bannerData = reader.readBanner();
System.out.println(bannerData.getBanner());
}
}
打印:
ABC
使用的依赖:
<dependency>
<groupId>org.codehaus.jackson</groupId>
<artifactId>jackson-mapper-asl</artifactId>
<version>1.9.13</version>
</dependency>
json file:
json file:
{
"Banner": "ABC"
}
更新2
虽然上述代码不适合您,但请尝试添加
While the above code does not work for you, try adding
@JsonProperty("Banner")
不仅到私有变量,但也到getter / setter对,如:
not only to the private variable, but also to the getter/setter pair, like:
@JsonProperty("Banner")
private String banner;
@JsonProperty("Banner")
public String getBanner() {
return banner;
}
@JsonProperty("Banner")
public void setBanner(String banner) {
this.banner = banner;
}
这篇关于Java模型的JSON字段映射的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!