Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/webpack/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 返回JAX-RS响应时如何更改POJO属性名称?_Java_Jackson_Jax Rs - Fatal编程技术网

Java 返回JAX-RS响应时如何更改POJO属性名称?

Java 返回JAX-RS响应时如何更改POJO属性名称?,java,jackson,jax-rs,Java,Jackson,Jax Rs,我想使用默认的JAX-RS响应反序列化器 这是我的POJO @JsonIgnoreProperties(ignoreUnknown = true) public class Email { private String mFrom; private List<String> mTo; private List<String> mCc; private List<String> mBcc; private St

我想使用默认的JAX-RS响应反序列化器

这是我的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响应来解决这个问题。如何让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();
公共类JsonDeserializer
{
私有静态对象映射器mMapper;
静止的
{
mMapper=newObjectMapper();
mMapper.setSerializationInclusion(Inclusion.NON_NULL);
}
@SuppressWarnings({“unchecked”,“rawtypes”})
来自InputStream的公共静态T(InputStream是,类T)
{
尝试
{
返回(T)mMapper.readValue(is,T);
}
捕获(JSONParsee异常)
{
e、 printStackTrace();
}
捕获(JsonMappingException e)
{
e、 printStackTrace();
}
捕获(IOE异常)
{
e、 printStackTrace();
}
catch(ClassCastException e)
{
e、 printStackTrace();
}
返回null;
}
}
Response.ok(jsondesializer.toJson(emails)).build();

不需要创建另一个类来处理反序列化过程,就可以做到这一点。

混入可以帮助您解决这个问题。您需要创建一个抽象类,如“EmailExpanded”,其属性如下:

@JsonProperty("carbon_copy")
public abstract List<String> getCc();
在代码的后面部分,当您发送响应时:

emailExpandMapper.writeValueAsString(emails)

您可以在web上阅读有关混合的更多信息。

使用这种方法,我必须为要更改的每个属性创建一个对象映射器。你知道还有别的办法吗。在我当前的解决方案中,我将Jackson ObjectMapper放入一个静态类中,并以这种方式反序列化它。
@JsonProperty("carbon_copy")
public abstract List<String> getCc();
emailExpandMapper = new ObjectMapper();
emailExpandMapper.getSerializationConfig().addMixInAnnotations(
            Email.class, EmailExpanded.class);
emailExpandMapper.getSerializationConfig().setSerializationInclusion(
            Inclusion.NON_NULL);
emailExpandMapper.writeValueAsString(emails)