在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 ) );
}
答案 0 :(得分:0)
使用com.fasterxml.jackson.annotation.JsonProperty