杰克逊序列化如何不显示类和字段名称

时间:2017-01-12 09:47:51

标签: java json jackson

有没有办法在序列化过程中使用Jackson来打印 1.类名(构造函数名) 2.字段名称(表示仅打印字段值)

    public class Test
{


    private static final Logger LOG = Logger.getLogger(Test.class);

    /**
     * @param args
     * @throws IOException
     * @throws JsonMappingException
     * @throws JsonGenerationException
     */
    public void work(final ObjectMapper mapper) throws JsonGenerationException, JsonMappingException, IOException
    {
        RestrictedAndVat restrictedAndVat = new RestrictedAndVat();
        restrictedAndVat.setRate(BigDecimal.valueOf(20));
        restrictedAndVat.setRestricted(true);
        final CountryRestrictedAndVat countryRestrictedAndVat1 = new CountryRestrictedAndVat();
        countryRestrictedAndVat1.setCountryCode("UK");
        countryRestrictedAndVat1.setRestrictedAndVat(restrictedAndVat);

        final ProductCountryRestrictedAndVat productCountryRestrictedAndVat = new ProductCountryRestrictedAndVat();
        final List<CountryRestrictedAndVat> list = new ArrayList<CountryRestrictedAndVat>();
        list.add(countryRestrictedAndVat1);

        productCountryRestrictedAndVat.setCountryRestrictedAndVat(list);
        LOG.info("Json:" + serialiseJson(productCountryRestrictedAndVat, mapper));

    }

    private <DATA> String serialiseJson(final DATA pojoData, final ObjectMapper mapper)
            throws JsonGenerationException, JsonMappingException, IOException
    {

        final StringWriter jsonWriter = new StringWriter();
        mapper.writeValue(jsonWriter, pojoData);
        return jsonWriter.toString().trim();
    }

}

public class ProductCountryRestrictedAndVat
{


    @JsonProperty(value = "crv", required = false)
    private List<CountryRestrictedAndVat> countryRestrictedAndVat;

    /**
     * @return the countryRestrictedAndVat
     */
    public List<CountryRestrictedAndVat> getCountryRestrictedAndVat()
    {
        return countryRestrictedAndVat;
    }

    /**
     * @param countryRestrictedAndVat
     *           the countryRestrictedAndVat to set
     */
    public void setCountryRestrictedAndVat(final List<CountryRestrictedAndVat> countryRestrictedAndVat)
    {
        this.countryRestrictedAndVat = countryRestrictedAndVat;
    }




}


    public class RestrictedAndVat
    {


        @JsonProperty("vat")
        @JsonInclude(JsonInclude.Include.NON_NULL)
        private BigDecimal rate;

        @JsonProperty("restricted")
        private boolean restricted;

        /**
         * @return the rate
         */
        public BigDecimal getRate()
        {
            return rate;
        }

        /**
         * @param rate
         *           the rate to set
         */
        public void setRate(final BigDecimal rate)
        {
            this.rate = rate;
        }

        /**
         * @return the restricted
         */
        public boolean isRestricted()
        {
            return restricted;
        }

        /**
         * @param restricted
         *           the restricted to set
         */
        public void setRestricted(final boolean restricted)
        {
            this.restricted = restricted;
        }

    }

    public class CountryRestrictedAndVat
    {



        @JsonProperty("country")
        private String countryCode;


        @JsonProperty(value = "rv", required = false)
        private RestrictedAndVat restrictedAndVat;


        /**
         * @return the countryCode
         */
        public String getCountryCode()
        {
            return countryCode;
        }


        /**
         * @param countryCode
         *           the countryCode to set
         */
        public void setCountryCode(final String countryCode)
        {
            this.countryCode = countryCode;
        }


        /**
         * @return the restrictedAndVat
         */
        public RestrictedAndVat getRestrictedAndVat()
        {
            return restrictedAndVat;
        }


        /**
         * @param restrictedAndVat
         *           the restrictedAndVat to set
         */
        public void setRestrictedAndVat(final RestrictedAndVat restrictedAndVat)
        {
            this.restrictedAndVat = restrictedAndVat;
        }

    }

输出是: JSON:{&#34; CRV&#34;:[{&#34;国家&#34;:&#34; UK&#34;&#34; RV&#34; {&#34;缸&#34; :20,&#34;限制&#34;:真}}]}

我希望它是: JSON:[{&#34; UK&#34; {&#34;缸&#34;:20,&#34;限制&#34;:真}}]

1 个答案:

答案 0 :(得分:0)

是的,可以使用自定义序列化器。

使用

为您的CountryRestrictedAndVat课程添加注释
@JsonSerialize(using = CountryRestrictedAndVatSerializer.class)

删除@JsonProperty注释。

编写序列化器:

public class CountryRestrictedAndVatSerializer extends JsonSerializer<CountryRestrictedAndVat> {
    @Override
    public void serialize(CountryRestrictedAndVat value,
                          JsonGenerator gen,
                          SerializerProvider serializers) throws IOException, JsonProcessingException {
        gen.writeStartObject();
        gen.writeObjectField(value.getCountryCode(), value.getRestrictedAndVat());
        gen.writeEndObject();
    }
}