有没有办法在序列化过程中使用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;:真}}]
答案 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();
}
}