Why Jackson not produce "propertie id"?
Result run Main
{id=1, name=Marcelo, email=test@gmail.com, password=123456, token=t1234, refre ...}
{id=1, name=Marcelo, email=test@gmail.com, password=null, enable=true}
propertie id > {"name":"Marcelo","email":"test@gmail.com","enable":true}
The problem consist in propertie id mapped with
@JsonProperty(access = Access.WRITE_ONLY) When Serializable not produces propertie and your value
jackson 2.13.0, but bug existin in others versions
In github has project simulator the problem Bug Jackson Serializable propertie
Show code here
Main.class
package com;
import com.fasterxml.jackson.annotation.JsonInclude;
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.DeserializationFeature;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.SerializationFeature;
import com.fasterxml.jackson.databind.module.SimpleModule;
public class Main {
private ObjectMapper model;
public Main() {
model = modelMapper();
}
public static void main(String[] args) {
var main = new Main();
var userEntity = new User();
System.out.println(userEntity.toString());
var user = main.getModel().convertValue(userEntity, UserDTO.class);
System.out.println(user.toString());
try {
System.out.println(main.getModel().writeValueAsString(user));
} catch (JsonProcessingException e) {
e.printStackTrace();
}
}
public ObjectMapper getModel() {
return model;
}
private ObjectMapper modelMapper() {
var model = new ObjectMapper();
model.registerModule(new SimpleModule());
model.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
model.setSerializationInclusion(JsonInclude.Include.NON_ABSENT);
model.configure(SerializationFeature.USE_EQUALITY_FOR_OBJECT_ID, false);
return model;
}
}
UserDTO.class
package com;
import java.io.Serializable;
import java.util.Objects;
import com.fasterxml.jackson.annotation.JsonProperty;
import com.fasterxml.jackson.annotation.JsonProperty.Access;
public class UserDTO implements Serializable {
private static final long serialVersionUID = 1L;
@JsonProperty(access = Access.WRITE_ONLY)
private Long id;
private String name;
private String email;
@JsonProperty(access = Access.READ_ONLY)
private String password;
private Boolean enable = false;
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public Boolean getEnable() {
return enable;
}
public void setEnable(Boolean enable) {
this.enable = enable;
}
@Override
public int hashCode() {
return Objects.hash(id);
}
@Override
public boolean equals(Object obj) {
if (this == obj)
return true;
if (obj == null)
return false;
if (getClass() != obj.getClass())
return false;
UserDTO other = (UserDTO) obj;
return Objects.equals(id, other.id);
}
@Override
public String toString() {
return "{id=" + id + ", name=" + name + ", email=" + email + ", password=" + password + ", enable="
+ enable + "}";
}
}
User.class
package com;
import java.io.Serializable;
import java.util.Date;
import java.util.Objects;
public class User implements Serializable {
private static final long serialVersionUID = 1L;
private Long id = 1L;
private String name = "Marcelo";
private String email = "test@gmail.com";
private String password = "123456";
private String token = "t1234";
private String refresh = "t2345";
private Boolean enable = true;
private Boolean hashAble = true;
private Date dataLastChange = new Date();
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public String getToken() {
return token;
}
public void setToken(String token) {
this.token = token;
}
public String getRefresh() {
return refresh;
}
public void setRefresh(String refresh) {
this.refresh = refresh;
}
public Boolean getEnable() {
return enable;
}
public void setEnable(Boolean enable) {
this.enable = enable;
}
public Boolean getHashAble() {
return hashAble;
}
public void setHashAble(Boolean hashAble) {
this.hashAble = hashAble;
}
public Date getDataLastChange() {
return dataLastChange;
}
public void setDataLastChange(Date dataLastChange) {
this.dataLastChange = dataLastChange;
}
@Override
public int hashCode() {
return Objects.hash(id);
}
@Override
public boolean equals(Object obj) {
if (this == obj)
return true;
if (obj == null)
return false;
if (getClass() != obj.getClass())
return false;
User other = (User) obj;
return Objects.equals(id, other.id);
}
@Override
public String toString() {
return "{id=" + id + ", name=" + name + ", email=" + email + ", password=" + password + ", token=" + token
+ ", refresh=" + refresh + ", enable=" + enable + ", hashAble=" + hashAble + ", dataLastChange="
+ dataLastChange + "}";
}
}