将java对象属性序列化为json

x4shl7ld  于 2021-06-26  发布在  Java
关注(0)|答案(0)|浏览(239)

我在java spring中内置了一个api,它(使用jacksonjaxbjsonprovider 2.5.5)从这个类返回一个json对象:

public class FieldValues {
    private String code;
    private Object value;

    public String getCode() {
        return code;
    }
    public void setCode(String code) {
        this.code = code;
    }
    public Object getValue() {
        return value;
    }
    public void setValue(Object value) {
        this.value = value;
    }
}

我的主要目标是

@JsonRootName(value = "WorkRequest")
@XmlRootElement(name = "WorkRequest")
@JsonIgnoreProperties(ignoreUnknown = true)
public class WorkRequestDTOResponse {   
    private List<FieldValues> fieldValues;
    public List<FieldValues> getFieldValues() {
        return fieldValues;
    }
    public void setFieldValues(List<FieldValues> fieldValues) {
        this.fieldValues = fieldValues;
    }
}

但是fieldvalues对象的输出是:

"fieldValues": [
    {
        "code": "anomaly",
        "value": {
            "@xsi.type": "ns3:boolean",
            "$": "true"
        }
    },{
        "code": "internal_note",
        "value": {
            "@xsi.type": "ns3:string",
            "$": "Test text example"
        }
    }
]

相反,我需要的是:

"fieldValues": [
    {
        "code": "anomaly",
        "value": true
    },{
        "code": "internal_note",
        "value": "Test text example"
    }
]

这是我的json提供程序:

public class ErmesJSONProvider extends JacksonJaxbJsonProvider {
    public ErmesJSONProvider() {
        ObjectMapper mapper = new ObjectMapper();
        mapper.configure(DeserializationFeature.UNWRAP_ROOT_VALUE, true);
        mapper.configure(DeserializationFeature.ACCEPT_SINGLE_VALUE_AS_ARRAY, true);

        mapper.configure(SerializationFeature.WRAP_ROOT_VALUE, true);
        mapper.configure(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS, true);
        mapper.configure(SerializationFeature.WRITE_SINGLE_ELEM_ARRAYS_UNWRAPPED, false);

        _mapperConfig.setMapper(mapper);
        _mapperConfig.getConfiguredMapper().setAnnotationIntrospector(new JacksonAnnotationIntrospector());
    }
}

尝试使用字符串而不是对象:

public class FieldValues {
    private String code;
    private String value;

但如果我把这个值设为字符串 fieldValues.setValue("true") ,json输出为 "value": true 相反 "value": "true" 同样,如果我将这个值设置为string,但使用整数 fieldValues.setValue("1") ,json输出为 "value": 1 相反 "value": "1" 我不明白为什么?
有人能帮我吗?谢谢。

暂无答案!

目前还没有任何答案,快来回答吧!

相关问题