복붙노트

[SPRING] @ResponseBody를 사용하여 Spring Controller에서 JSON 데이터를 반환하는 방법

SPRING

@ResponseBody를 사용하여 Spring Controller에서 JSON 데이터를 반환하는 방법

Spring 버젼 4.2.0, Hibernate 4.1.4 여기 내 컨트롤러 기능은 다음과 같습니다.

@RequestMapping(value = "/mobile/getcomp", method = RequestMethod.GET)
@ResponseBody
public List<Company>  listforCompanies() {      
    List<Company> listOfCompanies= new ArrayList<Company>();        
    listOfCompanies = companyManager.getAllCompanies();
    return listOfCompanies;
}

Pom.xml의 Jackson JSON 매퍼 종속성 :

    <!-- Jackson JSON Mapper -->
    <dependency>
        <groupId>org.codehaus.jackson</groupId>
        <artifactId>jackson-mapper-asl</artifactId>
        <version>${jackson.version}</version>
    </dependency>

내 ArrayList에서 목록 가져 오기,하지만 다음 오류를 반환하면 표시됩니다 :

SEVERE: Servlet.service() for servlet [dispatcherServlet] in context with path [/IrApp] threw exception [Request processing failed; nested exception is java.lang.IllegalArgumentException: No converter found for return value of type: class java.util.ArrayList] with root cause
    java.lang.IllegalArgumentException: No converter found for return value of type: class java.util.ArrayList
        at org.springframework.util.Assert.isTrue(Assert.java:68)
        at org.springframework.web.servlet.mvc.method.annotation.AbstractMessageConverterMethodProcessor.writeWithMessageConverters(AbstractMessageConverterMethodProcessor.java:124)

내가 팔로우하는 예에 대한 링크.

해결법

  1. ==============================

    1.pom.xml에 아래의 의존성을 추가하십시오 :

    pom.xml에 아래의 의존성을 추가하십시오 :

    <dependency>
        <groupId>com.fasterxml.jackson.core</groupId>
        <artifactId>jackson-databind</artifactId>
        <version>2.5.0</version>
    </dependency>
    
  2. ==============================

    2.나는 같은 문제에 직면했다. @RestController를 사용하고 있기 때문에 @ResponseBody를 넣지 않았습니다. 하지만 회사 클래스 용 getter / setter 메서드를 사용하지 않았기 때문에 여전히 오류가 발생했습니다. 그래서 getter / setter를 쓴 후에 내 문제가 해결되었습니다.

    나는 같은 문제에 직면했다. @RestController를 사용하고 있기 때문에 @ResponseBody를 넣지 않았습니다. 하지만 회사 클래스 용 getter / setter 메서드를 사용하지 않았기 때문에 여전히 오류가 발생했습니다. 그래서 getter / setter를 쓴 후에 내 문제가 해결되었습니다.

  3. ==============================

    3.또한 반환 된 빈이 비어 있지 않아야하고 (그리고 잭슨에 의해 직렬화 될 수 있음) 반드시 확인해야합니다. 내 특별한 경우 엔 getters와 setter없이 jackson annotation이없고 필드가 null 인 객체의 인스턴스를 반환하려고했습니다. 나는 다음 메시지를 얻었다 :

    또한 반환 된 빈이 비어 있지 않아야하고 (그리고 잭슨에 의해 직렬화 될 수 있음) 반드시 확인해야합니다. 내 특별한 경우 엔 getters와 setter없이 jackson annotation이없고 필드가 null 인 객체의 인스턴스를 반환하려고했습니다. 나는 다음 메시지를 얻었다 :

    com.fasterxml.jackson.databind.JsonMappingException:
        No serializer found for class com.foo.bar.Baz and no properties discovered to create BeanSerializer (to avoid exception, disable SerializationFeature.FAIL_ON_EMPTY_BEANS) )
    
  4. ==============================

    4.이 문제에 직면했을 때, 나는 단순히 getter setter 메서드를 넣었고 문제는 해결되었습니다.

    이 문제에 직면했을 때, 나는 단순히 getter setter 메서드를 넣었고 문제는 해결되었습니다.

    스프링 부트 버전 2.0을 사용하고 있습니다.

  5. ==============================

    5.@Arpit 대답을 고려해 볼 때, 그것은 jackson 종속성을 두 개 추가 할 때만 작동했습니다.

    @Arpit 대답을 고려해 볼 때, 그것은 jackson 종속성을 두 개 추가 할 때만 작동했습니다.

    <dependency>
        <groupId>com.fasterxml.jackson.core</groupId>
        <artifactId>jackson-core</artifactId>
        <version>2.4.3</version>
    </dependency>
    <dependency>
        <groupId>com.fasterxml.jackson.core</groupId>
        <artifactId>jackson-databind</artifactId>
        <version>2.4.3</version>
    </dependency>
    

    원인의 web.xml 을 구성합니다.

    나를 도왔던 원래의 대답은 여기에 있습니다 : https://stackoverflow.com/a/33896080/3014866

  6. ==============================

    6.제 경우에는 JDK 1.6과 호환되지 않는 jackson-databind-2.8.8.jar을 사용했습니다. 스프링이이 변환기를로드하지 않도록 사용해야합니다. 나는 버전을 다운 그레이드했고 지금 작동한다.

    제 경우에는 JDK 1.6과 호환되지 않는 jackson-databind-2.8.8.jar을 사용했습니다. 스프링이이 변환기를로드하지 않도록 사용해야합니다. 나는 버전을 다운 그레이드했고 지금 작동한다.

  7. from https://stackoverflow.com/questions/32905917/how-to-return-json-data-from-spring-controller-using-responsebody by cc-by-sa and MIT license