域模型类中的Spring java自定义get-method

时间:2015-04-28 11:11:08

标签: java json spring spring-data datamodel

使用Spring数据我希望能够在域模型类中定义自定义get方法,而不会影响模型本身。例如,使用此模型:

@Document
public class Person
{
    private String firstName;
    private String lastName;

    public String getFirstName()
    {
        return firstName;
    }

    public void setFirstName(String firstName)
    {
        this.firstName = firstName;
    }

    public String getLastName()
    {
        return lastName;
    }

    public void setLastName(String lastName)
    {
        this.lastName = lastName;
    }
}
到目前为止,Eveything工作得很好:模型人物有字段' firstName'和' lastName'我可以成功地拯救一个人#39;生成的JSON包含字段" firstName'和' lastName'。现在我想在JSON中添加一些额外的数据,而不会影响模型及其保存操作,如下所示:

@Document
public class Person
{
    private String firstName;
    private String lastName;

    public String getFirstName()
    {
        return firstName;
    }

    public void setFirstName(String firstName)
    {
        this.firstName = firstName;
    }

    public String getLastName()
    {
        return lastName;
    }

    public void setLastName(String lastName)
    {
        this.lastName = lastName;
    }

    // custom method
    public String getFullName()
    {
        return firstName+" "+lastName;
    }
}

JSON应该包含与以前相同的数据,但这次也是一个额外的' fullName' -field。但是,与此同时,数据模型假设了一个额外的字段" fullName'在保存到数据库中时添加并填充空值。

我已经尝试过像@Transient这样的注释,但这不起作用。 documentation状态"默认情况下,所有私有字段都映射到文档,此批注将排除应用它的字段排除在数据库"之外,因此它只能应用于私有字段在课堂上,而不是get-methods。

在Spring中执行此操作的正确方法是什么?当然我可以扩展类Person并在那里包含getFullName方法,但我想知道是否可以在一个类中包含所有内容。

编辑:

我使用spring-data-elasticsearch 1.2.0.RELEASE将Elasticsearch用作数据库引擎。我刚刚测试了MongoDB作为替代品,然后它工作正常,即使没有@Transient注释。我认为ElasticsearchRepository的索引方法是在将提供的类实例保存到数据库时序列化它。这样,JSON输出和保存的数据总是相同的。有什么建议吗?

0 个答案:

没有答案