相关疑难解决方法(0)

杰克逊+建筑师模式?

我希望Jackson使用以下构造函数反序列化一个类:

public Clinic(String name, Address address)
Run Code Online (Sandbox Code Playgroud)

反序列化第一个参数很容易.问题是地址被定义为:

public class Address {
  private Address(Map<LocationType, String> components)
  ...

  public static class Builder {
    public Builder setCity(String value);
    public Builder setCountry(String value);
    public Address create();
  }
}
Run Code Online (Sandbox Code Playgroud)

并构造如下: new Address.Builder().setCity("foo").setCountry("bar").create();

有没有办法从杰克逊获得键值对,以便自己构建地址?或者,有没有办法让杰克逊使用Builder类本身?

java json jersey jackson

80
推荐指数
4
解决办法
4万
查看次数

使用 Jackson 与 Lombok 构建器进行反序列化

问题

Lombok@builder注释为类创建构建器类。为了支持 json 项的反序列化(使用Jackson 的 ObjectMapper),我添加了以下注释:

@Builder
@JsonDeserialize(builder = Item.ItemBuilder.class)
@JsonPOJOBuilder(withPrefix="")
public class Item {
    @Getter
    String partitionvalue;
}
Run Code Online (Sandbox Code Playgroud)

这是基于@Jacksonized 文档的。关于反序列化器的使用,在存储在AWS S3存储桶中的json文件上,其内容很简单:{"partitionvalue": "test"},我的代码是:

AmazonS3 s3Client = AmazonS3ClientBuilder.standard()
            .withCredentials(new DefaultAWSCredentialsProviderChain())
            .withRegion(region)
            .build();
S3Object s3Object = s3Client.getObject(new GetObjectRequest(bucket, key));
Item item = objectMapper.readValue(s3Object.getObjectContent(), Item.class);
Run Code Online (Sandbox Code Playgroud)

但是,当在 json 文件上运行时,Jackson 失败并显示以下消息:

Unrecognized field "partitionvalue" (class com.example.Test$TestBuilder),
 not marked as ignorable (0 known properties: ])
 at [Source: com.amazonaws.services.s3.model.S3ObjectInputStream@2ca47471; line: 1, column: 21] (through …
Run Code Online (Sandbox Code Playgroud)

java json jackson lombok

11
推荐指数
2
解决办法
2万
查看次数

如何与Jackson一起全局定义命名约定

我在Spring上使用Jackson。我有几种这样的方法:

@RequestMapping(value = "/myURL", method = RequestMethod.GET)
public @ResponseBody Foo getFoo()  {
    // get foo
    return foo;
}
Run Code Online (Sandbox Code Playgroud)

序列化的Foo类很大,并且有很多成员。使用注释或自定义序列化程序可以进行序列化。

我唯一不知道的是如何定义命名约定。我想对所有序列化使用snake_case。

那么,如何为全局定义序列化的命名约定?

如果不可能的话,则必须采用本地解决方案。

java spring jackson spring-boot

4
推荐指数
2
解决办法
4920
查看次数

标签 统计

jackson ×3

java ×3

json ×2

jersey ×1

lombok ×1

spring ×1

spring-boot ×1