2016-03-30 6 views
1

作成フローでは、ObjectMapperのキャストは正常に機能します( "first_name"と "last_name"が渡された場合)。私は更新の流れに取り組んでいます。ペイロードデータだけを既存のDBデータにパッチする必要があります。@JsonPropertyはBeanWrapperには適用されません

マイ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)); 

私は、追加のゲッターとセッターを追加してみました。それは正常に動作していた。しかし、私は多くの分野があるので、これを克服したい。どんな助けもありがとう!

追加ゲッター&セッター(それを動作させるために - しかし、私はそれを避けるために必要がある):

@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なししかし、このdoesntの仕事)他の機能のためにこれを使用しています:

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

使用com.fasterxml.jackson.annotation.JsonProperty

+0

私は唯一のことを使用しています –

関連する問題