請多多包涵。我瀏覽了很多鏈接,但找不到適合我的案例的解決方案。我需要幫助。
注意:我無法更改 JSON 請求(在測驗中表示為地圖)
這是我的 POJO:
public class TestModelWithDoubleField {
private Double frequency;
public Double getFrequency(){
return frequency;
}
/**
* @param frequency the frequency to set
*/
public void setFrequency(Double frequency) {
this.frequency = frequency;
}
/**
* @param frequency the frequency to set
*/
@JsonIgnore
public void setFrequency(Integer frequency) {
if(frequency != null) {
setFrequency(new Double(frequency));
}
}
}
這是失敗的測驗:
@Test
public void testWithIntegerValueConvertToDoubleFieldInPOJO() throws IOException {
final Map<String, Integer> map = new HashMap<>();
map.put("frequency", 900);
TestModelWithDoubleField pojo = objectMapper.convertValue(map, TestModelWithDoubleField.class);
Assert.assertNotNull(pojo);
Assert.assertNotNull(pojo.getFrequency()); //-> This is giving output as null. Hence fails.
}
在線路Assert.assertNotNull(pojo.getFrequency());頻率為零。因此測驗失敗。
我希望它自動轉換為它的 Double 型別。穿上@JsonIgnore另一個二傳手也不起作用。
任何從該地圖中獲取有效物件的方法都可以。
uj5u.com熱心網友回復:
只需添加@JsonProperty("frequency")所需的二傳手。你甚至不需要@JsonIgnore另一個。
public static class TestModelWithDoubleField
{
private Double frequency;
public Double getFrequency()
{
return frequency;
}
/**
* @param frequency the frequency to set
*/
@JsonProperty("frequency")
public void setFrequency(Double frequency)
{
this.frequency = frequency;
}
/**
* @param frequency the frequency to set
*/
public void setFrequency(Integer frequency)
{
if(frequency != null)
{
setFrequency(new Double(frequency));
}
}
}
uj5u.com熱心網友回復:
只需洗掉該public void setFrequency(Integer frequency)方法,它就會起作用:
public class TestModelWithDoubleField {
private Double frequency;
public Double getFrequency(){
return frequency;
}
public void setFrequency(Double frequency){
this.frequency = frequency;
}
}
由于您無法洗掉該public void setFrequency(Integer frequency)方法,因此您可以通過將其他 setter@JsonProperty定義為 Jackson 使用的 setter 來注釋其他 setter :
public class TestModelWithDoubleField {
private Double frequency;
public Double getFrequency(){
return frequency;
}
@JsonProperty
public void setFrequency(Double frequency) {
this.frequency = frequency;
}
public void setFrequency(Integer frequency) {
if(frequency != null) {
setFrequency(new Double(frequency));
}
}
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/337283.html
上一篇:想要模擬屬于另一個類的依賴項
