2017-03-29 31 views
1

我使用Jackson ObjectMapper將字符串轉換爲Pojo。如何映射一個字符串內的對象以使用ObjectMapper設置

我收到的消息:

{ 
    "countryCode": "US", 
    "skuNumber": "TEST", 
    "itemTaxCd": "89999", 
    "lastModifiedBy": "xyz" 
} 

方法:

public void processImsProductTaxEvents(String event) { 
    try { 
     SkuMasterDTO message = objectMapper.readValue(event, SkuMasterDTO.class); 
     log.debug("Received message from IMS", message); 
    } catch (Exception e) { 
     log.error("Error in Object Mapper converting String to TaxCodeDTO", e); 
    } 
} 

現在COUNTRYCODE是內內SkuMasterDTO CountryDTO定義爲一組

private Set<CountryDTO> countries = new HashSet<>(); 

CountryDTO類

public class CountryDTO implements Serializable { 

    private static final long serialVersionUID = 1L; 

    @NotNull 
    @Size(max = 2) 
    private String countryCode; 

我試圖將countryCode設置爲集而不更改輸入Json。有什麼建議麼?

+0

的,你需要輸入JSON類似,'{ 「國家」:{ 「COUNTRYCODE」: 「US」}, 「skuNumber」: 「TEST」, 「itemTaxCd」: 「89999」, 「lastModifiedBy 「:」xyz「 }' – dullpointer

+0

客戶端以這種格式發送它,所以我不想在他們的結尾要求改變。 –

回答

3

考慮在您的ObjectMapper實例中使用DeserializationFeature.ACCEPT_SINGLE_VALUE_AS_ARRAYS。然後,您必須將json字段countryCode更改爲countries或將Set countries更改爲json屬性countryCode並使用@JsonProperty並在參數String內提供構造函數/工廠方法。這將使您的對象映射器按照您的要求運行。

+0

@ holi-java感謝您的編輯。 –

+0

完全沒有,答案是非常好的。我只是添加了一些東西來描述如何去做。 –

0

您必須在SkuMasterDTO類中定義countryCode。

您可以添加一個getter和建立一套

Set<CountryDTO> getCountries(){ 
    Set<CountryDTO> countries = new HashSet<>(); 
    countries.add(new CountryDTO(countryCode)); 
    return countries; 
} 

或者你可以準備設置裏面設置方法。

相關問題