캐스트 할 수없는, 나는봄 (4.2.6) + 잭슨 (2.8.4) + 일반 유형 : 내가 지정하는 경우 java.util.LinkedHashMap 이틀 후
... 다음에 붙어 컨트롤러의 유형, 그것은 작동합니다
@RestController
public class FooController {
@RequestMapping(method = RequestMethod.POST)
protected ResponseModel bar(@Valid @RequestBody Foo foo) {
// here I have foo of type Foo
}
}
을하지만, 내가 제네릭을 활용하려고하면, 그것은 작동하지 않습니다
public class Base<U> {
@RequestMapping(method = RequestMethod.POST)
protected ResponseModel bar(@Valid @RequestBody U entity) {
// here I get java.util.LinkedHashMap instead of U
// which, in the FooController, should be Foo
}
}
@RestController
public class FooController extends Base<Foo> {
}
를 로그를 보면,이 컨트롤러를 칠 때 정의 된 유형은 다음과 같습니다.
Read [class com...Foo] as "application/json;charset=UTF-8" with [org.springfr[email protected]cee662]
동안 일반 하나에 :
Read [U] as "application/json;charset=UTF-8" with [org.springfr[email protected]cee662]
Q : 내가 일반 유형을 활용해야하고, 컨트롤러에서 반복되는 코드를 절감 할 수 있도록?
참고 :이 다른 모든 질문부터 중복은 약 List<T>
또는 ~ 2.6에 대한 문제에서이다 아닙니다 *
부록 :. Yuri-M-Dias, 나는 않았다하는 너무 2.5.5 작품을 다운 그레이드 제안 일반 유형이지만 2.8.4는 그렇지 않습니다.
내가 개정 2.7.9 나는, 좋은 것을 발견 ... 다운 그레이드에 더 나아가
(적어도 지금 나는 나쁜 좋은 작동하도록 개정 ...이) 2.834에서 LinkedHashMap<K,V>
을 얻는 동안 U
에서 Foo
을 얻으십시오. 아마도 ... 2.8.0 release에서 뭔가를 놓쳤을까요?
String을 사용하고 Jackson의 ObjectMapper를 사용하여 변환하지 않는 이유는 무엇입니까? –
이것은 내부에'List'가없는 간단한 엔티티로 해결할 수 있습니다. 그러나 일단 거기에 도착하면 잭슨이 꽤 잘하는 타입 유추를 잃을 것입니다 ... 그리고 타입 어노테이션으로'List'문제를 해결할 수있는 가능성을 잃을 것입니다 ... –
joaumg
이 잭슨 문제와 관련이있을 수 있습니다 : [제네릭 형식의 비 직렬화는 2.7.0 이후에 작동하지 않습니다.] (https://github.com/FasterXML/jackson-databind/issues/1210)/[일반 형식 및 빌더에서 제대로 작동하지 않는 직렬화 해제] (https : // github. com/FasterXML/jackson-databind/issues/921). 첫 번째 링크는 2.7.4의 수정 사항을 설명합니다. 두 번째 링크는 예상되는 클래스 대신'LinkedHashMap'을받는 것과 같은 증상을 경험하지만 현재 누구도이 문제를 해결하지 못하는 것 같습니다. –