反序列化后获取空字段 java JSON
Get null fields after deserialization java JSON
我假设 class 结构有问题。但我看不出在哪里。这是一个代码。我将仅使用 JSON 中的一些值。如果您需要其他代码部分,请告诉我。主要是我想我在这里得到了空值的对象(用户):
User userDTOGetOne = userRequester.getUser
(
token,
new HashMap<String, Object>() {{ put("Uuid", userResponseDTO.getUserUuid()); }}
)
.getBody()
.as(User.class);
我想这是一个具有 class 结构的 .as(User.class) 问题。我没有对它们进行过一次比较,但我找不到问题。提前谢谢你。
终于找到你的问题了
1.@JsonRootName("User")
in User
class 不行,我必须单独创建一个 UserDTo
class.
import com.fasterxml.jackson.annotation.JsonProperty;
import lombok.Data;
@Data
public class UserDTO {
@JsonProperty("User")
private User user;
}
2.In class User
private HashMap<String, HashMap<String, CustomFieldDTO> > UserCustomFields;
应该是
private Map<String, CustomFieldDTO> UserCustomFields;
3.In class CustomFieldDTO
private HashMap<String, CustomFieldVariableDTO> WebAdmin;
private HashMap<String, CustomFieldVariableDTO> Client;
应该是
private CustomFieldVariableDTO WebAdmin;
private CustomFieldVariableDTO Client;
我做个简单的测试
UserDTO user = res.as(UserDTO.class);
System.out.println(user);
UserDTO(user=User(Uuid=b5ee1186-7355-4810-a422-c427c1ae420c,
Username=golden_snich_testt, Email=golsnich4599@gmail.com, FirstName=Bob,
LastName=Sigal, Birthdate=1995-01-07T00:00:00Z, Phone=+12698741258,
Notes=null, Locked=false, PostPayLimit=10.0, HighSchoolUuid=null,
IsVerifiedHighSchoolUser=false, UserCustomFields={9cebfaaa-ca66-4bbd-baa3-
557b0645c293=CustomFieldDTO(FieldUuid=null, FieldType=String,
FieldName=null, WebAdmin=CustomFieldVariableDTO(Status=0,
AllowChangeStatus=false), Client=CustomFieldVariableDTO(Status=0,
AllowChangeStatus=false), IsDefault=false,
SerializedValue=Nickyfieldname213241), bb854ba1-8ef7-4cfb-9fe7-
8c6d9a0551b2=CustomFieldDTO(FieldUuid=null, FieldType=String,
FieldName=null, WebAdmin=CustomFieldVariableDTO(Status=0,
AllowChangeStatus=false), Client=CustomFieldVariableDTO(Status=0,
AllowChangeStatus=false), IsDefault=false,
SerializedValue=Nickyfieldname2)}))
我假设 class 结构有问题。但我看不出在哪里。这是一个代码。我将仅使用 JSON 中的一些值。如果您需要其他代码部分,请告诉我。主要是我想我在这里得到了空值的对象(用户):
User userDTOGetOne = userRequester.getUser
(
token,
new HashMap<String, Object>() {{ put("Uuid", userResponseDTO.getUserUuid()); }}
)
.getBody()
.as(User.class);
我想这是一个具有 class 结构的 .as(User.class) 问题。我没有对它们进行过一次比较,但我找不到问题。提前谢谢你。
终于找到你的问题了
1.@JsonRootName("User")
in User
class 不行,我必须单独创建一个 UserDTo
class.
import com.fasterxml.jackson.annotation.JsonProperty;
import lombok.Data;
@Data
public class UserDTO {
@JsonProperty("User")
private User user;
}
2.In class User
private HashMap<String, HashMap<String, CustomFieldDTO> > UserCustomFields;
应该是
private Map<String, CustomFieldDTO> UserCustomFields;
3.In class CustomFieldDTO
private HashMap<String, CustomFieldVariableDTO> WebAdmin;
private HashMap<String, CustomFieldVariableDTO> Client;
应该是
private CustomFieldVariableDTO WebAdmin;
private CustomFieldVariableDTO Client;
我做个简单的测试
UserDTO user = res.as(UserDTO.class);
System.out.println(user);
UserDTO(user=User(Uuid=b5ee1186-7355-4810-a422-c427c1ae420c,
Username=golden_snich_testt, Email=golsnich4599@gmail.com, FirstName=Bob,
LastName=Sigal, Birthdate=1995-01-07T00:00:00Z, Phone=+12698741258,
Notes=null, Locked=false, PostPayLimit=10.0, HighSchoolUuid=null,
IsVerifiedHighSchoolUser=false, UserCustomFields={9cebfaaa-ca66-4bbd-baa3-
557b0645c293=CustomFieldDTO(FieldUuid=null, FieldType=String,
FieldName=null, WebAdmin=CustomFieldVariableDTO(Status=0,
AllowChangeStatus=false), Client=CustomFieldVariableDTO(Status=0,
AllowChangeStatus=false), IsDefault=false,
SerializedValue=Nickyfieldname213241), bb854ba1-8ef7-4cfb-9fe7-
8c6d9a0551b2=CustomFieldDTO(FieldUuid=null, FieldType=String,
FieldName=null, WebAdmin=CustomFieldVariableDTO(Status=0,
AllowChangeStatus=false), Client=CustomFieldVariableDTO(Status=0,
AllowChangeStatus=false), IsDefault=false,
SerializedValue=Nickyfieldname2)}))