@JsonProperty不申请BeanWrapper

时间:2016-03-30 12:01:05

标签: java spring jackson objectmapper

在create flow中,ObjectMapper的编译工作正常(如果" first_name"" last_name"则传递)。我正在研究更新流程。我只需要将有效负载数据修补到现有的DB数据。

我的POJO:

public class Contact
{
    @JsonProperty( "first_name" )
    @JsonView( ContactViews.CommonFields.class )
    private String firstName;

    @JsonProperty( "last_name" )
    @JsonView( ContactViews.CommonFields.class )
    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;
        }
}

假设我只有" first_name"现有联系人。我需要用" last_name"来更新它。我以地图的形式收到有效载荷({" last_name":" XYZ"})。如何使用有效负载Map更新现有联系人。

现有的创建代码:

 Contact contact = mapper.readerWithView( ContactViews.CommonFields.class ).forType( Contact.class ).readValue( mapper.writeValueAsString( payloadMap ) );

我尝试添加额外的getter和setter。它工作正常。但是我想要克服这个问题,因为有很多领域。任何帮助将不胜感激!!

其他吸气剂&塞特斯(为了使它工作 - 但我需要避免它):

    @JsonProperty( "first_name" )
    public String getFirst_name()
        {
            return firstName;
        }

    @JsonProperty( "first_name" )
    public void setFirst_name( String firstName )
        {       
            this.firstName = firstName;
        }

    @JsonProperty( "last_name" )
    public String getLast_name()
        {
            return lastName;
        }

    @JsonProperty( "last_name" )
    public void setLast_name( String lastName )
        {
            this.lastName = lastName;
        }

我将其用于其他功能(但如果没有额外的getter和setter,这不起作用):

public static void applyMapOntoInstance( Object instance , Map <String , ?> properties )
        {
            if ( Utilities.isEmpty( properties ) )
                return;

            String propertyName;

            BeanWrapper beanWrapper = PropertyAccessorFactory.forBeanPropertyAccess( instance );
            for ( Object name : properties.entrySet() )
                {
                    Map.Entry <String , ?> entry = (Map.Entry <String , ?>) name;
                    propertyName = entry.getKey();
                    if ( beanWrapper.isWritableProperty( propertyName ) )
                        beanWrapper.setPropertyValue( propertyName , entry.getValue() );
                }
        }

    public static void copyValues( Object source , Object target , Iterable <String> properties )
        {
            BeanWrapper src = new BeanWrapperImpl( source );
            BeanWrapper trg = new BeanWrapperImpl( target );

            for ( String propertyName : properties )
                trg.setPropertyValue( propertyName , src.getPropertyValue( propertyName ) );
        }

1 个答案:

答案 0 :(得分:0)

使用com.fasterxml.jackson.annotation.JsonProperty