1

在创建流程中,ObjectMapper 转换工作正常(如果传递了“first_name”和“last_name”)。我正在处理更新流程。我只需要将有效负载数据修补到现有的数据库数据。

我的 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"} )。如何使用有效负载地图更新现有联系人。

现有的创建代码:

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

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

额外的 Getters & Setters(使其工作 - 但我需要避免它):

    @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 ) );
        }
4

1 回答 1

0

利用com.fasterxml.jackson.annotation.JsonProperty

于 2016-03-30T13:59:51.483 回答