我具有時區POJO如下:處理空和默認值與傑克遜
@Entity
public class TimeZoneDto implements Serializable {
private static final long serialVersionUID = 1L;
@Id
@Column(name = "id", nullable = false)
@GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "timezone_sequence")
@SequenceGenerator(name = "timezone_sequence", sequenceName = "t_timeZone_master_id_seq", initialValue = 1, allocationSize = 1)
private Long id;
@Column
private String timeZone;
@Column
private String name;
@Column
private double hourDifference;
/* all gettet/setter */
}
我在彈簧控制器如下updateTimeZone方法:
@RequestMapping(value = "updateTimezone", consumes = "application/json", produces = "application/json", method = RequestMethod.POST)
public ResponseEntity<Object> updateTimezone(@RequestBody TimeZoneDto timeZoneDto){
}
當我如下傳請求:
{"id":14,"name":"America/Los_Angeles -7:00 GMT"}
然後它自動轉換其他值與默認值時映射與POJO a ND它變爲:
id=14, timeZone=null, name=America/Los_Angeles -7:00 GMT, hourDifference=0.0
因爲如此,當我更新這POJO如下
getEntityManager().merge(timezoneDto);
它覆蓋時區= null並且hourDifference = 0.0自動,
所以有任何方法,通過該我在@RequestBody中的TimeZoneDto只有那些在請求JSON中傳遞的列。
編輯
我在下面用在類,但它不能正常工作
@JsonInclude(value=Include.NON_EMPTY)
OR
@JsonInclude(value=Include.NON_DEFAULT)
你想要這些值默認爲?我的意思是,當Jackson反序列化JSON時,默認情況下它只是將DTO創建爲一個普通的java對象,而所有缺少的字段將採用它們的默認值。 –
當傑克遜反序列化JSON –
我不理解時,我想忽略DTO對象中所有缺少的字段,傑克遜已經忽略了那些字段,這就是爲什麼他們得到默認值。你需要JSOn中那些不存在的字段在DTO中? –