相关疑难解决方法(0)

如何创建一组杰克逊注释的注释?

大约一年后,我读了一篇文章,解释了如何创建一个基本上是其他注释容器的注释.这样,如果我总是在特定用例中使用相同的5个注释,我会创建一个包含它们的注释并使用它.

不幸的是,我再也找不到这篇文章,而且我现在真的想为我的杰克逊配置做这件事.

由于我自己找不到任何相关信息,我开始质疑我的记忆.这可能还是我错了?

编辑

我想要的是:

@Target(ElementType.METHOD)
@com.fasterxml.jackson.databind.annotation.JsonSerialize(using=MySerializerThatIsUsedEverywhere.class
@javax.xml.bind.annotation.adapters.XmlJavaTypeAdapter(MyCustomXmlAdapter.class)
@SomeOtherEvaluatedByTheSerializer
public @interface SerializerUseCase01 {
    public String a();
    public int b();
)
Run Code Online (Sandbox Code Playgroud)

我的情况是我有一堆序列化用例,可以由具有不同配置的相同序列化程序处理.为了使一切更容易使用和更透明,我想将jackson配置和序列化器配置包装成一个注释.

java annotations jackson

38
推荐指数
1
解决办法
1万
查看次数

与Jackson重复的JSON字段

我正在使用Jackson与Spring一起进行JSON(de)序列化.但是,在某些情况下,我遇到了两次字段的问题.

我有一个抽象类:

@JsonTypeInfo(use = JsonTypeInfo.Id.NAME, include = JsonTypeInfo.As.PROPERTY, property = "mimeType")
@JsonSubTypes({
    @JsonSubTypes.Type(value = ImageBookmarkJsonModel.class, name = "image/jpeg"),
    @JsonSubTypes.Type(value = EpubBookmarkJsonModel.class, name = "application/epub+zip")
})
public abstract class AbstractBookmarkJsonModel extends AbstractJsonModel {
    protected String mimeType;
    // Removed other fields for brevity

    public String getMimeType() {
        return mimeType;
    }

    public void setMimeType(String mimeType) {
        this.mimeType = mimeType;
    }

    @Override
    public String toString() {
        ObjectMapper mapper = new ObjectMapper();

        try {
            return mapper.writeValueAsString(this);
        } catch (IOException e) {
            throw new IllegalStateException("Cannot convert …
Run Code Online (Sandbox Code Playgroud)

java json jackson

24
推荐指数
3
解决办法
1万
查看次数

使用新的 Record 类时无法反序列化

我想看看我是否可以用 Java 14 中的新 Record 类替换我现有的 Pojo。但无法这样做。得到以下错误:

com.fasterxml.jackson.databind.exc.InvalidDefinitionException:无法构造实例com.a.a.Post(无创建者,如默认构造,存在):无法从对象值反序列化(无基于委托或属性的创建者)

我知道错误是说记录没有构造函数,但是从我所看到的记录类在后台处理它,并且相关的 getter 也在后台设置(不完全是 getter,而是 id() title() 等等没有 get 前缀)。是不是因为 Spring 还没有采用最新的 Java 14 记录?请指教。谢谢。

我在 Spring Boot 版本 2.2.6 中执行此操作并使用 Java 14。

以下使用通常的 POJO 工作。

邮政类

public class PostClass {
    private int userId;
    private int id;
    private String title;
    private String body;

    public int getUserId() {
        return userId;
    }

    public void setUserId(int userId) {
        this.userId = userId;
    }

    public int getId() {
        return id;
    }

    public void setId(int id) { …
Run Code Online (Sandbox Code Playgroud)

java spring spring-boot java-14 java-record

13
推荐指数
2
解决办法
2556
查看次数

Jackson mixin注释包含某些属性并排除其他所有内容

我有一个第三方域对象,我希望使用Jackson序列化为JSON.通过公共getter可以访问很多属性,但我只对这些属性中的一小部分感兴趣.由于这是第三方对象,我选择了mixin路线.但是,除了在mixin界面上定义的内容之外,我找不到从原始类中排除所有内容的好方法.我试图在mixin类上指定@JsonIgnoreProperties,但它很快就会失控,需要忽略大量属性.任何解决方法?

提前致谢!

编辑:添加一些代码

public class SpecialObject {
private String name;
private Integer id;
public String getName() {
    return name;
}
public Integer getId() {
    return id;
}
public String getFoo() {
    return "foo";
}
}

public interface SpecialObjectMixin {
    @JsonProperty
    String getName();
}
Run Code Online (Sandbox Code Playgroud)

我希望我只能在序列化的JSON中获得名称.顺便说一下,我正在使用这个来通过cxf-jaxrs与杰克逊作为提供者进行休息.

json cxf jackson

12
推荐指数
1
解决办法
2252
查看次数

使用jackson将java对象转换为json字符串时重复的json属性

我有Pojo对象,使用getAsJson函数返回此对象的Json字符串.我使用JsonProperty来定义此对象中的json属性.使用ObjectMapper的writeValueAsString为此对象编写json字符串.

import org.codehaus.jackson.JsonGenerationException;
import org.codehaus.jackson.annotate.JsonIgnore;
import org.codehaus.jackson.annotate.JsonIgnoreProperties;
import org.codehaus.jackson.annotate.JsonProperty;
import org.codehaus.jackson.map.JsonMappingException;
import org.codehaus.jackson.map.ObjectMapper;

@JsonIgnoreProperties(ignoreUnknown=true)
public class LogLikeArticleDetail extends BaseObject {
    private static final long serialVersionUID = -2018373118257019033L;
    @JsonProperty("LikeArticleGUId")
    private String likeArticleGUId;
    @JsonProperty("UserId")
    private String userID;
    @JsonProperty("UserName")
    private String userName;
    @JsonProperty("IP") 
    private String ip;
    @JsonProperty("OS") 
    private String os;
    @JsonProperty("UserAgent") 
    private String userAgent;
    @JsonProperty("WebsiteCode") 
    private String websiteCode;
    @JsonProperty("ArticleId") 
    private String articleID;
    @JsonProperty("ATitle") 
    private String aTitle;
    @JsonProperty("CateAlias") 
    private String cateAlias;
    @JsonProperty("LikeStatus") 
    private String likeStatus;
    @JsonProperty("TimeStamp") 
    private Date timeStamp;
        //get, set....
        //....
        @JsonIgnore
    public …
Run Code Online (Sandbox Code Playgroud)

java json properties duplicates jackson

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

Jackson 2.0忽略了课堂上的所有属性

我需要与之相反@JsonIgnore,我需要告诉杰克逊忽略对象上的所有属性,除了我注释的对象.我不小心想要有人添加一个属性而忘记添加一个@JsonIgnore然后我将它暴露在我不想要的地方.

谁知道如何实现这一目标?

java jackson

7
推荐指数
1
解决办法
3451
查看次数

XStream 使用 getter 进行序列化

我的 Web 服务使用 Spring MVC 以 xml 和 json 格式返回数据。对于 json,spring 使用 Jackson 和 XStream for XML。但是,XStream 使用字段进行序列化,而 Jackson 使用方法(setter/getter)。

我想在 xml 序列化中包含所有/一些 getter。如何通过自定义转换器或注释来实现这一点?

java xml spring xstream

5
推荐指数
1
解决办法
2290
查看次数

实体属性序列化两次

在Spring 3.3中,我有一个映射到数据库表的实体.在这个实体类中,我有使用@JsonProperty注释的所有属性,例如@JsonProperty("ID").进入控制器,调用服务以通过使用DAO /存储库来获取此类实体.这很好用但是当我使用@ResponseBody将此实体发送回请求者时,所有属性都会被发送两次.一旦要求,但再一次开始小写直到第一个驼峰案件出现.一个例子...

public class MyEntity {
    @JsonProperty("MYSpecialSuperId")
    private String MYSpecialSuperId;

    ...

    public String getMYSpecialSsuperId() {
        return this.MYSpecialSuperId;
    }

}
Run Code Online (Sandbox Code Playgroud)

在JSON字符串化后,结果是:

{ "MYSpecialSuperId":""9", "myspecialSuperId":"9" }
Run Code Online (Sandbox Code Playgroud)

为什么结果中的属性是两次,为什么字体不同?

顺便说一句:我的想法是让Java属性以大写字母开头,即使还有一个以上的大写字母.

java spring json jackson

4
推荐指数
1
解决办法
4030
查看次数