0
我想使用默認的JAX-RS響應解串器。如何在返回JAX-RS響應時更改POJO屬性名稱?
這裏是我的POJO
@JsonIgnoreProperties(ignoreUnknown = true)
public class Email
{
private String mFrom;
private List<String> mTo;
private List<String> mCc;
private List<String> mBcc;
private String mSubject;
private String mText;
public void setFrom(String from)
{
mFrom = from;
}
@JsonProperty("from")
public String getFrom()
{
return mFrom;
}
@JsonProperty("to")
public List<String> getTo()
{
return mTo;
}
public void setTo(List<String> to)
{
mTo = to;
}
@JsonProperty("carbon_copy")
public List<String> getCc()
{
return mCc;
}
public void setCc(List<String> cc)
{
mCc = cc;
}
@JsonProperty("blind_carbon_copy")
public List<String> getBcc()
{
return mBcc;
}
public void setBcc(List<String> bcc)
{
mBcc = bcc;
}
}
這是我的JAX-RS碼。
@GET
@Produces("application/json", "application/xml", "text/xml")
public Response getEmails() {
List<Email> emails = getEmails(); //returns list of emails
return Response.ok(emails).build();
}
輸出
[{"from":"[email protected]","to":[ ],"cC":[ ],"bCc":[ ],"subject":"my subject","text":"email from admin"}]
我想 「CC」 更改爲 「carbon_copy」。我想用JAX-RS響應來解決這個問題。我如何讓JAX-RS使用jackson註釋的屬性名稱。我是否需要重寫某些內容?
我目前的實施我做了以下。
public class JsonDeserializer
{
private static ObjectMapper mMapper;
static
{
mMapper = new ObjectMapper();
mMapper.setSerializationInclusion(Inclusion.NON_NULL);
}
@SuppressWarnings({ "unchecked", "rawtypes" })
public static <T> T fromInputStream(InputStream is, Class t)
{
try
{
return (T) mMapper.readValue(is, t);
}
catch (JsonParseException e)
{
e.printStackTrace();
}
catch (JsonMappingException e)
{
e.printStackTrace();
}
catch (IOException e)
{
e.printStackTrace();
}
catch (ClassCastException e)
{
e.printStackTrace();
}
return null;
}
}
Response.ok(JsonDeserializer.toJson(emails)).build();
有沒有創建另一個類來處理反序列化過程。
使用這種方法,我將不得不爲每個我想改變的屬性創建一個對象映射器。你知道如果有另一種方式。我現在的解決方案,我把傑克遜ObjectMapper放入一個靜態類,並反序列化它。 – James