当前位置: 首页 > 知识库问答 >
问题:

Java模型的JSON字段映射

殷轶
2023-03-14
{
  "Banner": "ABC"
}
...
@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 {
...
}

当json更改为(小写命名与Java字段名相同)时工作正常:

{
  "banner": "ABC"
}

但是,我需要在JSON中使用大写字段命名。
看起来@JSONProperty(value=“banner”)不起作用。

是正确的映射吗?

共有1个答案

赏光霁
2023-03-14

也许你只是试着:

@JsonProperty("Banner")

不带“value=”。我在我的项目中使用了它,它实际上像预期的那样工作。

更新

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;
 }
}
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>
{
  "Banner": "ABC"
}

更新2

虽然上面的代码对您不起作用,但请尝试添加

@JsonProperty("Banner")

不仅对私有变量,而且对getter/setter对也是如此,比如:

@JsonProperty("Banner")
private String banner;

@JsonProperty("Banner")
public String getBanner() {
  return banner;
}

@JsonProperty("Banner")
public void setBanner(String banner) {
  this.banner = banner;
}
 类似资料:
  • 问题内容: 我正在重写使用内部框架编写的旧REST服务,以使用Spring。我有一个带有POST方法的Controller,该方法采用一个参数作为POST或正文。按照多个StackOverflow答案,我使用了@ModelAttribute批注并创建了一个模型。 我的问题是,旧的REST API在蛇形情况下使用属性名称-say 。我希望我的Java代码遵循Java命名约定,因此在我的模型中该字段称

  • 问题内容: 我在这里有一个复杂的json 我正在尝试在我的模型类“ ChromeJsonModel”中映射它,例如: 但是我收到以下错误。 我为什么会在哪里出问题? 问题答案: 您拥有非常复杂的有效负载,其中相同的属性可能具有一个或多个对象。默认情况下不会处理这种情况,因此我们需要为此类属性实现自定义反序列化器。下面我创建了代表您的有效负载的简单模型: 如您所见,它是-es属性。让我们为这些属性实

  • 问题内容: 我需要将obj 映射到一个类及其中的数组,并且它也应该具有所有子级数据。(也嵌套数组列表),我需要再次将更新的数据列表转换为 我的json字符串是 问题答案: 首先, 您需要创建要在其中映射JSON的类。 幸运的是,有一个网站,可以为你做它在这里 其次,您可以使用Google Gson库进行轻松映射 1.添加 依赖项 。 2.从您的对象到JSON。 3.从JSON到object。 有关

  • 我有一个restendpoint,它返回3级嵌套json,如下所示: 我有一个java类,没有相同的3个嵌套级别: 当我使用restTemplate拨打rest电话时: jackson甚至没有使用json ignore属性映射字段departName(因为我猜它不在同一嵌套级别)。 如何将这个http json响应映射到忽略嵌套父json的java字段?

  • 问题内容: 我不清楚杰克逊如何处理映射字段中的大写字母。如果有人可以帮忙,我将不胜感激。 上面是我的json,下面是我的例外… 上面是我的例外,下面是我的课… …等等 问题答案: 由于您的设置方法命名为Jackson,因此假设变量的命名是基于Java的 命名约定 (变量应以小写字母开头)。 如果您真的想要一个大写字母,请使用 setter 上的 @JsonProperty 注释(或-进行序列化-在

  • 我不清楚jackson是如何处理映射字段中的大写字母的。如果有人能帮忙,我将不胜感激。 上面是我的json,下面是我的例外。。。 上面是我的例外,下面是我的班级。。。 ... 等等