2017-11-29 1 views
0

와 잭슨 직렬화에 대한 기본 생성자 나는 이런 ArrayList의 자녀가 : 나는 그것을 (이전 버전과의 호환성)를 사용할 수밖에 없다바이 패스 봄

public class SomeList<T> extends ArrayList<T> { 
    private Class<T> clazz; 

    public SomeList(Class<T> clazz) { 
     this.clazz = clazz; 
    } 

    public boolean add(T t) { 
     return t != null ? super.add(t) : false; 
    } 

    public Class getGenericClass() { 
     return this.clazz; 
    } 
} 

을, 나는 그것을 수정할 수 없습니다 나는 역 직렬화 할 필요가 그것은 봄 컨트롤러, 예에 :

@RequestMapping(value = "/somethingHappens", method = {RequestMethod.POST}) 
@ResponseBody 
public ServiceResult somethingHappens(@RequestBody SomeList<SomeObject> someObjects) { 
    return ResponseUtils.createOkJsonResponse(someService.getSomethingElse(someObjects)); 
} 

난, 난 그냥,이 ArrayList를했다으로이 같은 방법을 SomeList 직렬화하는 clazz에가도 받았습니다도 직렬화 할 필요가 없습니다하지만이에 수 없습니다 왜냐하면 기본 생성자가 없기 때문입니다.

어떻게 든 MixIn을 사용할 수 있습니까? 사용자 정의 디시리얼라이저를 사용하여 "어떻게 ArrayList와 똑같이 할 수 있습니까?"라고 말할 수 있습니까?

+0

가능한 해결책 여기 https://stackoverflow.com/questions/11664894/jackson-deserialize-using-generic-class – Kayaman

답변

0

그것은 당신이 당신의 봄 컨트롤러에서 할 수있는 얼마나 많은 편집 불분명하지만, 하나 개의 잠재적 인 솔루션은 까다로운 클래스를 확장하는 기본 생성자, 또 다른 클래스를 생성하고, 대신 컨트롤러에 그것을 사용하는 것입니다

public class ExtSomeList extends SomeList<SomeType> { 
    public ExtSomeList() { 
     super(SomeType.class); 
    } 
} 

지금 사용하는 대신 컨트롤러 내부 :

public ServiceResult somethingHappens(@RequestBody ExtSomeList someObjects) { 
    return ResponseUtils.createOkJsonResponse(someService.getSomethingElse(someObjects)); 
} 
+0

그것은 단지 내가 것 제어기 매개 변수에 대한 인 경우 배열 사용 문제는 없지만이 목록이 사용되는 큰 모델이 있습니다. 대체/변경이 불가능하며 비 직렬화해야합니다. – stove