[SPRING] Spring MVC @ResponseBody가 Map을 리턴하면 "Error 406 NOT ACCEPTABLE"
SPRINGSpring MVC @ResponseBody가 Map을 리턴하면 "Error 406 NOT ACCEPTABLE"
@ResponseBody를 설정하여 컬렉션을 반환하는 데 문제가 있습니다. 클래스 패스에 JAXB jar가 있는데 ContentNegotiatingViewResolver를 설정하지 않았습니다.
이것은 내 간단한 개체입니다 :
@XmlRootElement(name = "test-object")
@XmlAccessorType(XmlAccessType.FIELD)
public class TestObject implements Serializable {
@XmlAttribute
private int id;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
}
단일 객체를 반환하는 간단한 테스트를 작성했습니다 ... 문제없이 작동하며 생성 된 XML을 볼 수 있습니다.
@RequestMapping(value = "one", method = RequestMethod.GET)
public @ResponseBody TestObject getSingleObject() {
TestObject obj = new TestObject();
obj.setId(1);
return obj;
}
내가 정말로 원하는 것은 객체의 목록을 반환하는 것입니다. 주위를 읽은 후 그렇게하는 방법은지도에 목록을 배치하고지도를 반환하는 것입니다.
@RequestMapping(value = "all", method = RequestMethod.GET)
public @ResponseBody Map<String, ? extends Object> getAllObjects() {
TestObject obj1 = new TestObject();
obj1.setId(1);
TestObject obj2 = new TestObject();
obj2.setId(2);
List<TestObject> list = Arrays.asList(obj1, obj2);
return Collections.singletonMap("all-objects", list);
}
위를 실행할 때 "오류 406 Not Acceptable"이 표시됩니다.
나는 여기서 무엇을 잘못 했는가? 차이가 나는 경우 부두 6.1에서 실행 중입니다.
감사.
해결법
-
==============================
1.pom.xml에 추가 된이 두 가지 종속성이 필요합니다!
pom.xml에 추가 된이 두 가지 종속성이 필요합니다!
<dependency> <groupId>org.codehaus.jackson</groupId> <artifactId>jackson-core-lgpl</artifactId> <version>1.8.1</version> </dependency> <dependency> <groupId>org.codehaus.jackson</groupId> <artifactId>jackson-mapper-lgpl</artifactId> <version>1.8.1</version> </dependency>
-
==============================
2.나는 동일한 문제가 있었고 디버깅을 2 시간 수행 한 후에 마침내 해결책을 찾았습니다. 누군가 다른 사람이 같은 문제에 얽매여있는 경우를 대비해서 내가 찾은 것입니다.
나는 동일한 문제가 있었고 디버깅을 2 시간 수행 한 후에 마침내 해결책을 찾았습니다. 누군가 다른 사람이 같은 문제에 얽매여있는 경우를 대비해서 내가 찾은 것입니다.
아마 당신은 mvc : annotation-driven 설정 요소를 사용할 것을 지시하는 Spring 3의 Ajax Simplification을 따를 것입니다.
mvc : annotation-driven은 이미 정의 된 빈 중 하나를 제외하고는 몇 가지 표준 빈을 정의하는 바로 가기입니다!
mvc : annotation-driven 구성을 사용하면 MappingJacksonHttpMessageConverter가 org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter에 messageConverter로 등록됩니다.
자신의 AnnotationMethodHandlerAdapter를 정의한 경우이 MappingJacksonHttpMessageConverter도 수동으로 정의해야합니다.
AnnotationMethodHandlerAdapter에 등록 된 Cfr 사용자 지정 메시지 변환기는 사용되지 않고 기본 변환기 만 사용됩니다. 비슷한 문제를 논의합니다. 또한 SPR-6524 및 SPR-6306을 확인하고 스팸 방지로 인해 링크를 게시 할 수 없습니다.
내 봄 설정의 관련 부분이 이렇게 보였다 :
<bean class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter"> <property name="webBindingInitializer"> <bean class="org.springframework.web.bind.support.ConfigurableWebBindingInitializer"> <property name="validator"> <bean class="org.springframework.validation.beanvalidation.LocalValidatorFactoryBean"> </bean> </property> </bean> </property> <property name="messageConverters"> <list> <bean class="org.springframework.http.converter.ByteArrayHttpMessageConverter"/> <bean class="org.springframework.http.converter.StringHttpMessageConverter"/> <bean class="org.springframework.http.converter.ResourceHttpMessageConverter"/> <bean class="org.springframework.http.converter.xml.SourceHttpMessageConverter"/> <bean class="org.springframework.http.converter.xml.XmlAwareFormHttpMessageConverter"/> <bean class="org.springframework.http.converter.xml.Jaxb2RootElementHttpMessageConverter"/> <bean class="org.springframework.http.converter.json.MappingJacksonHttpMessageConverter"/> <bean class="org.springframework.http.converter.feed.AtomFeedHttpMessageConverter"/> <bean class="org.springframework.http.converter.feed.RssChannelHttpMessageConverter"/> </list> </property> </bean>
-
==============================
3.나는이 질문이 약간 오래된 것을 알고 있지만, 나는 똑같은 문제가있다.
나는이 질문이 약간 오래된 것을 알고 있지만, 나는 똑같은 문제가있다.
jackson-core-asl-1.x.jar 및 jackson-mapper-asl-1.x.jar 경로 2 개의 병을 빌드하기 위해 추가했습니다. http://wiki.fasterxml.com/JacksonDownload에서 다운로드하거나 Maven을 사용하는 경우 projet 종속성으로 추가 할 수 있습니다.
버전 1.x (1.9, 내 경우에는)를 사용하고 2.x는 사용하지 않았습니다. 마지막 버전이 나에게 적합하지 않았습니다.
-
==============================
4.답변보다는 제안이 많지만지도를 만든 다음 개체를 추가하고 다음과 같이지도를 반환하려고 했습니까?
답변보다는 제안이 많지만지도를 만든 다음 개체를 추가하고 다음과 같이지도를 반환하려고 했습니까?
@RequestMapping(value = "all", method = RequestMethod.GET) public @ResponseBody Map<String, ? extends Object> getAllObjects() { TestObject obj1 = new TestObject(); obj1.setId(1); TestObject obj2 = new TestObject(); obj2.setId(2); List<TestObject> list = Arrays.asList(obj1, obj2); Map<String, Object> map = new TreeMap<String, Object>(); map.put("all-objects",list); return map; }
from https://stackoverflow.com/questions/7336875/spring-mvc-responsebody-returning-a-map-produces-error-406-not-acceptable by cc-by-sa and MIT license
'SPRING' 카테고리의 다른 글
[SPRING] 봄 JSP 페이지가 평가되지 않음 (0) | 2019.03.26 |
---|---|
[SPRING] Spring RestTemplate은 "500"오류를 발생 시키지만 같은 URL, credentails는 RestClient와 Curl에서 작동합니다. (0) | 2019.03.26 |
[SPRING] HTTP 상태 405 - 요청 메소드 'POST'는 Spring MVC에서 지원되지 않는다. (0) | 2019.03.25 |
[SPRING] 동일한 유형의 2 개의 bean 사용 : Spring의 javax.sql.DataSource (0) | 2019.03.25 |
[SPRING] 클래스 패스가 아닌 의존성의 테스트 리소스? (0) | 2019.03.25 |