1
내 서버에 요청할 때 추가 기능을 사용하고 있습니다. 여러 요청에 대해 동일한 모델을 사용하려고하며 다른 SerializedName으로 다른 개체를 보내려고합니다. 내 POJO는 다음과 같습니다Gson set SerializedName
public class BaseModel<T> implements Serializable {
@SerializedName("success")
@Expose
private boolean succcess;
@SerializedName("data")
@Expose private T data;
public boolean isSucccess() {
return succcess;
}
public void setSucccess(boolean succcess) {
this.succcess = succcess;
}
public T getData() {
return data;
}
public void setData(T data) {
this.data = data;
}
}
어떻게 동적 방법으로 내 @SerializedName ("데이터")를 설정할 수 있습니까? 시간 내 주셔서 감사합니다.
코드 샘플 : 나는 (T 데이터로) BASEMODEL에 전송하고있는 객체의
public class BaseRequestModel<T> implements Serializable {
@SerializedName("success")
@Expose
private boolean success;
@Expose private T data;
public boolean isSucccess() {
return success;
}
public void setSucccess(boolean succcess) {
this.success = succcess;
}
public T getData() {
return data;
}
public void setData(T data) {
this.data = data;
}
}
하나 :
public class User implements Serializable {
transient String requestName = "user";
@SerializedName("id")
@Expose
private int id;
@SerializedName("owner_id")
@Expose private int ownerId;
@SerializedName("first_name")
@Expose private String firstName;
@SerializedName("middle_name")
@Expose private String middleName;
@SerializedName("last_name")
@Expose private String lastName;
@SerializedName("username")
@Expose private String username;
public String getRequestName() {
return requestName;
}
public void setRequestName(String requestName) {
this.requestName = requestName;
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public int getOwnerId() {
return ownerId;
}
public void setOwnerId(int ownerId) {
this.ownerId = ownerId;
}
public String getFirstName() {
return firstName;
}
public void setFirstName(String firstName) {
this.firstName = firstName;
}
public String getMiddleName() {
return middleName;
}
public void setMiddleName(String middleName) {
this.middleName = middleName;
}
public String getLastName() {
return lastName;
}
public void setLastName(String lastName) {
this.lastName = lastName;
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
}
내 사용자 정의 시리얼 : 내가 가진
public class BaseRequestCustomSerializer<T> implements JsonSerializer<User> {
@Override
public JsonElement serialize(User src, Type typeOfSrc, JsonSerializationContext context) {
src.getRequestName();
return null;
}
}
특정 객체 대신 시리얼 라이저로 전달해야한다. 내 문제가 전부이기 때문이다. 어떤 아이디어? 고맙습니다!
내 의견으로는 개조하려고 시도한 것에 직관적이지는 않지만 약간의 소리가 들리지만 사용자 지정 serializer를 작성할 수 있습니다. 필드의 이름을 쉽게 확인할 수 있도록 "일시적인 문자열 이름"필드가있을 수도 있습니다. – Fred
@ Fred 그래서 SerializedName을 사용하지 말고 대신 일시적인 String 이름을 초기화해야합니까? 내 사건에 좀 더 구체적으로 대답 해 줄 수 있니? (나는 gson & retrofit의 초보자입니다.) – Alphonse
그것은 단지 아이디어였습니다. 그렇습니다. 당신은''@ SerializedName''을 제거 할 것입니다. 왜냐하면 그것이 효과적으로 더 이상 작동하지 않을 것이기 때문입니다. gson에 사용자 정의 시리얼 라이저를 추가하면됩니다 (https://google.github.io/gson/apidocs/com/google/gson/JsonSerializer.html).''serialize'' 메소드는 객체를받습니다. 직렬화 프로세스에서 사용할 이름을 알려주는 속성을 오브젝트에 가지고 있어야합니다. 이 속성은 결과로 나오는 json에 나타나서는 안되기 때문에''transient''로 표시 할 것입니다. 이 모든 것은 비 직렬화를 위해 작동하지 않지만 요청 부분 만 언급했습니다. – Fred