프로그래밍 언어/JAVA

[오류]JsonMappingException : No suitable constructor found for type [simple type, class ]: can not instantiate from JSON object

Rateye 2021. 9. 13. 02:13
728x90
반응형
질문 : JsonMappingException : [단순 유형, 클래스] 유형에 적합한 생성자가 없습니다. JSON 객체에서 인스턴스화 할 수 없습니다.

JSON 요청을 받고 처리하려고 할 때 다음 오류가 발생합니다.

org.codehaus.jackson.map.JsonMappingException : No suitable constructor found for type [simple type, class ]: can not instantiate from JSON object (유형 정보를 추가 / 활성화해야합니까?).

보내려는 JSON은 다음과 같습니다.

{
  "applesDO" : [
    {
      "apple" : "Green Apple"
    },
    {
      "apple" : "Red Apple"
    }
  ]
}

Controller에는 다음과 같은 메서드 서명이 있습니다.

@RequestMapping("showApples.do")
public String getApples(@RequestBody final AllApplesDO applesRequest){
    // Method Code
}

AllApplesDO는 ApplesDO의 래퍼입니다.

public class AllApplesDO {

    private List<ApplesDO> applesDO;

    public List<ApplesDO> getApplesDO() {
        return applesDO;
    }

    public void setApplesDO(List<ApplesDO> applesDO) {
        this.applesDO = applesDO;
    }
}

ApplesDO :

public class ApplesDO {

    private String apple;

    public String getApple() {
        return apple;
    }

    public void setApple(String appl) {
        this.apple = apple;
    }

    public ApplesDO(CustomType custom){
        //constructor Code
    }
}

Jackson이 JSON을 하위 클래스의 Java 개체로 변환 할 수 없다고 생각합니다. JSON을 Java 객체로 변환하기 위해 Jackson의 구성 매개 변수를 도와주세요. Spring Framework를 사용하고 있습니다.

편집 : 위의 샘플 클래스 에서이 문제를 일으키는 주요 버그를 포함했습니다. 해결 방법에 대한 답변을 찾으십시오.

답변

그래서 마침내 나는 문제가 무엇인지 깨달았습니다. 내가 의심했던 것처럼 Jackson 구성 문제가 아닙니다.

실제로 문제는 ApplesDO 클래스에있었습니다.

public class ApplesDO {

    private String apple;

    public String getApple() {
        return apple;
    }

    public void setApple(String apple) {
        this.apple = apple;
    }

    public ApplesDO(CustomType custom) {
        //constructor Code
    }
}

기본 생성자로 만드는 클래스에 대해 정의 된 사용자 정의 생성자가 있습니다. 더미 생성자를 도입하면 오류가 사라졌습니다.

public class ApplesDO {

    private String apple;

    public String getApple() {
        return apple;
    }

    public void setApple(String apple) {
        this.apple = apple;
    }

    public ApplesDO(CustomType custom) {
        //constructor Code
    }

    //Introducing the dummy constructor
    public ApplesDO() {
    }

}
출처 : https://stackoverflow.com/questions/7625783/jsonmappingexception-no-suitable-constructor-found-for-type-simple-type-class
728x90
반응형