Java JSONVIEW.with正在将枚举序列化为带有@JsonFormat(shape=JsonFormat.shape.OBJECT)的字符串

Java JSONVIEW.with正在将枚举序列化为带有@JsonFormat(shape=JsonFormat.shape.OBJECT)的字符串,java,serialization,enums,Java,Serialization,Enums,我的代码是: final String json = getObjectMapper().writeValueAsString(JsonView.with(graph) .onClass(clazz, match() .exclude(EXCLUSION_RULE) .include(fields) )); 我正在尝试使用上面的enum代码序列化enum。但是,即使我对enum使用@JsonFormat(shape

我的代码是:

final String json = getObjectMapper().writeValueAsString(JsonView.with(graph)
        .onClass(clazz, match()
            .exclude(EXCLUSION_RULE)
            .include(fields)
        ));

我正在尝试使用上面的enum代码序列化enum。但是,即使我对enum使用
@JsonFormat(shape=JsonFormat.shape.object)
,我也只能得到值,而不能得到整个enum对象。

因为您使用的是JsonView来序列化要传递的任何类/枚举(在您的例子中是clazz),所以需要在类上注释所需的属性或getter

例如:

mapper.writerWithView(JsonView.<YOUR_VIEW_HERE>.class).writeValue(new File("example.json"), clazz);
版本:

jackson.version:2.9.5

jackson-jsog.version:1.1.1

我遇到了相同的问题,即使用JsonView时枚举不能序列化为对象。如果没有JsonView,它就可以工作。你有关于这个问题的最新消息吗?你找到解决办法了吗?哇,我确实忘了注释我想要的属性:哦,这对我来说真是个好办法!非常感谢你。
@JsonIdentityInfo(generator = JSOGGenerator.class)
@JsonFormat(shape = JsonFormat.Shape.OBJECT)
public enum Transmission implements Translateable<Character>{
    /**
     * automatic transmission
     */
    AUTOMATIC('A'),
    /**
     * manual transmission
     */
    MANUAL('M');

    /*... parts left out, since case shoud be clear */

    /**
     * 
     * @return key of the description as char.
     */
    @JsonProperty
    @JsonView(JsonView.<YOUR_VIEW_HERE>.class)
    public Character getKey() {
        return value;
    }


    /**
     * Gets the description of this <key>Transmission</key> in the given
     * <key>Locale</key>
     *
     * @return
     */
    @JsonProperty
    @JsonView(JsonView.<YOUR_VIEW_HERE>.class)
    public String getLabel() {
        return getLabel(this, locale);
    }

    @Override
    @JsonProperty
    @JsonView(JsonView.<YOUR_VIEW_HERE>.class)
    public Map<String, String> getKeys() {
        reloadLocale();
        return DESCRIPTIONS.get(locale);
    }

    /*... parts left out, since case shoud be clear */

    @Override
    @JsonProperty
    @JsonView(JsonView.<YOUR_VIEW_HERE>.class)
    public String getValue() {
        return name();
    }

}
@Component
@Primary
public class HibernateAwareObjectMapper extends ObjectMapper {

/**
 *
 */
private static final long serialVersionUID = 1L;

public HibernateAwareObjectMapper() {
    setSerializationInclusion(JsonInclude.Include.ALWAYS);
    configure(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS, false);
    configure(MapperFeature.DEFAULT_VIEW_INCLUSION, false);
    configure(SerializationFeature.INDENT_OUTPUT, true); // Better readability but larger payload. Remove this after testing
    Hibernate5Module jacksonHibernateModule = new Hibernate5Module();
    jacksonHibernateModule.enable(Hibernate5Module.Feature.FORCE_LAZY_LOADING);
    jacksonHibernateModule.disable(Hibernate5Module.Feature.USE_TRANSIENT_ANNOTATION);
    registerModule(jacksonHibernateModule);
}

}