Java模型的JSON字段映射 [英] JSON field mapping for Java model

查看:625
本文介绍了Java模型的JSON字段映射的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

发送的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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆