나는 클래스가 PagedResult
있습니다. 이 클래스는 페이지 형식의 다른 개체를 사용하여 JSON 출력을 실현하는 데 도움이됩니다. 는 E
목록에 싸여 객체입니다. 모두 잘 작동하지만 한 가지는 여전히 나를 괴롭 힙니다. 개체가있는 목록이 항상 같은 이름을 갖지 않기를 바랍니다. 해당 개체에 이름을 적용하고 싶습니다.
클래스 PagedResult
:
public class PagedResult<E> {
Long totalItems;
Integer totalPages;
Integer currentPage;
List<E> elements;
[... Getter & Setter ...]
}
객체가 포함 된 실제 JSON 출력은 MyPojo
다음과 같습니다.
{
"totalItems": 2,
"totalPages": 1,
"currentPage": 1,
"elements": [
{
"myPojoAttr1": "hello",
"myPojoAttr2": "there"
},
{
"myPojoAttr1": "hello",
"myPojoAttr2": "folks"
}
]
}
따라서 각 응답에 대해 어떤 객체 든 상관없이 배열은 "elements" 로 명명됩니다 . PagedResult
-class의 객체가 변경되기 때문에 JSON 응답에 추악한 이름을 원하지 않습니다 . MyPojo
JSON-Array 이름 과 같은 객체 가 "myPojos" 여야 하고 "myWins"MyWin
라는 이름 과 같은 객체로 응답을 받고 싶을 때 응답을받을 때 .
나는 많이 시도했지만 @JsonProperty
이 "object-array-name"도 일반적으로 수행하는 방법을 찾을 수 없습니다. 누군가가 문제로 나를 도울 수 있습니까? 미리 감사드립니다.
아뇨. 할 수 없습니다. 일반 유형에는 식별자가 아닌 유형에 대한 매개 변수가 있습니다. AFAIK, Java 언어에는 유형을 생성 할 때 Java 식별자를 매개 변수로 처리 할 수있는 것이 없습니다. (확실히,이 맥락에서 사용할 수있는 것은 없습니다!)
대안 :
하지마. (JSON 속성 이름을 변경하려는 이유를 자세히 살펴보십시오. 실제로 무엇을 달성합니까? 노력할만한 가치가 있습니까?)
제네릭 유형을 사용하지 마십시오. "페이징 된 결과"의 각 종류에 대해 다른 클래스를 정의하십시오. (Clunky. 권장하지 않습니다.)
맵을 사용하고 각 "페이징 된 결과"유형의 요소 속성에 대해 다른 맵 키로 맵을 채 웁니다. (단점은 정적 유형 검사를 잃고 약간의 성능 및 스토리지 패널티를 받는다는 것입니다. 그러나 이는 중요하지 않을 것입니다.)
사용자 지정 매퍼를 작성 PagedResult
하여 요구 사항에 따라 직렬화 및 역 직렬화합니다 .
그만한 가치는 매개 변수로서의 식별자는 매크로 전처리기로 할 수있는 일입니다. 그 Java 언어에는 그런 종류의 표준 지원이 없습니다.
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다