2014-10-28 4 views
14

을 "동의"내 pom.xml 파일에 다음과 같은 세부 정보가(406) 스프링 MVC JSON, 허용되지 요청에 따라 헤더

<dependency> 
     <groupId>org.codehaus.jackson</groupId> 
     <artifactId>jackson-core-asl</artifactId> 
     <version>1.9.13</version> 
    </dependency> 

    <dependency> 
     <groupId>org.codehaus.jackson</groupId> 
     <artifactId>jackson-mapper-asl</artifactId> 
     <version>1.9.13</version> 
    </dependency> 
    <dependency> 
     <groupId>org.apache.httpcomponents</groupId> 
     <artifactId>httpclient</artifactId> 
     <version>4.1.1</version> 
    </dependency> 
    <dependency> 
     <groupId>org.apache.tiles</groupId> 
     <artifactId>tiles-extras</artifactId> 
     <version>3.0.5</version> 
    </dependency> 
    <dependency> 
     <groupId>org.apache.tiles</groupId> 
     <artifactId>tiles-core</artifactId> 
     <version>3.0.5</version> 
    </dependency> 
    <dependency> 
     <groupId>org.springframework</groupId> 
     <artifactId>spring-webmvc</artifactId> 
     <version>${spring-framework.version}</version> 
    </dependency> 
    <dependency> 
     <groupId>org.springframework</groupId> 
     <artifactId>spring-web</artifactId> 
     <version>4.1.1.RELEASE</version> 
    </dependency> 
    <dependency> 
     <groupId>com.googlecode.json-simple</groupId> 
     <artifactId>json-simple</artifactId> 
     <version>1.1</version> 
    </dependency> 

응용 프로그램-config.xml 파일 :

<context:component-scan base-package="com.test" /> 
<mvc:annotation-driven /> 
<!-- <mvc:default-servlet-handler /> --> 
<mvc:resources mapping="/resources/**" location="/resources/" /> 

JSP 페이지 :

<form:form method="POST" action="/QuickBooks-UX/syncAccounts"> 
     <input type="submit" value="Sync Account"/> 
</form:form> 

컨트롤러 :

@Controller 
@RequestMapping("/") 
public class QuickBooksController { 
    @RequestMapping(value = "/quickBooks", method = RequestMethod.GET) 
    public String qucikBooks(ModelMap model) { 
     logger.info("Welcome to QuickBooks controller"); 
     model.addAttribute("message", "Hello Spring MVC Framework!"); 
     return "quickBooks"; 
    } 
    @RequestMapping(value ="/syncAccounts", method = RequestMethod.POST) 
    public @ResponseBody List<SyncData> syncAccounts(@ModelAttribute("syncData")SyncData syncData, ModelMap model, BindingResult result) { 
      List<SyncData> syncDataList = new ArrayList<SyncData>(); 
      try { 

       DefaultHttpClient httpClient = new DefaultHttpClient(); 
       HttpGet getRequest = new HttpGet(
        "http://localhost:8292/qbsyncdata/getAccounts"); 
       getRequest.addHeader("accept", "application/json"); 

       HttpResponse response = httpClient.execute(getRequest); 
       if (response.getStatusLine().getStatusCode() != 200) { 
        throw new RuntimeException("Failed : HTTP error code : " 
         + response.getStatusLine().getStatusCode()); 
       } 
       BufferedReader br = new BufferedReader(
           new InputStreamReader((response.getEntity().getContent())));     
       while ((output = br.readLine()) != null) { 
        JSONParser jsonParser = new JSONParser(); 
        JSONArray jsonArray = (JSONArray)jsonParser.parse(output); 
        for (Object object : jsonArray) { 
         JSONObject jsonObject = (JSONObject)object; 
         syncData = new SyncData(); 
         syncData.setAccountName(jsonObject.get("accountName")==null?"":jsonObject.get("accountName").toString()); 
         syncData.setAccountType(jsonObject.get("accountType")==null?"":jsonObject.get("accountType").toString()); 
         syncData.setAccountSubType(jsonObject.get("accountSubType")==null?"":jsonObject.get("accountSubType").toString()); 
         syncData.setActive(jsonObject.get("active")==null?"":jsonObject.get("active").toString()); 
         syncDataList.add(syncData); 
        }     
        model.addAttribute("syncData", output); 
       } 
       httpClient.getConnectionManager().shutdown(); 
       } catch (Exception e) { 
       e.printStackTrace(); 
       } 
      } 
     return syncDataList; 
    } 
} 

내가 나의 URL을 호출하고 있습니다 : http://lt-50k7sy1:8080/QuickBooks-UX/syncAccounts이 406 반환 및 설명과 같은 URL을 반환 버튼을 클릭 한 후

http://lt-50k7sy1:8080/QuickBooks-UX/quickBooks 

입니다 :

이 요구에 의해 식별되는 자원이다 요청에 따라 허용되지 않는 특성을 가진 응답 만 생성 가능 "accept"헤더

나는이 Link을 추적했지만 결과가 없습니다. 스프링 4.1이 필요합니다 당신의 pom.xml 파일에 항아리 다음

+2

직면 유사한 문제, 그리고 (http://stackoverflow.com/questions/26416248/srping-4-1-1-release-and-responsebody-return-http-406 – RE350

답변

43

추가. *

<dependency> 
    <groupId>com.fasterxml.jackson.core</groupId> 
    <artifactId>jackson-core</artifactId> 
    <version>2.4.1</version> 
</dependency> 
<dependency> 
    <groupId>com.fasterxml.jackson.core</groupId> 
    <artifactId>jackson-databind</artifactId> 
    <version>2.4.1.1</version> 
</dependency> 
+0

감사합니다, 그것은 도움이됩니다 다음 나는 버전 2.4.3을 사용했다). 또한 http://xpadro.blogspot.ca/2014/01/migrating-spring-mvc-restful-web.html 이전 가이드가 도움이되었습니다. – rodche

1

덕분에 내 문제를 해결했다. Controller 클래스에 @EnableWebMvc을 추가하여

<!-- Json dependency --> 
    <dependency> 
     <groupId>org.codehaus.jackson</groupId> 
     <artifactId>jackson-mapper-asl</artifactId> 
     <version>1.9.13</version> 
    </dependency> 
    <dependency> 
     <groupId>com.fasterxml.jackson.core</groupId> 
     <artifactId>jackson-core</artifactId> 
     <version>2.4.1</version> 
    </dependency> 
    <dependency> 
     <groupId>com.fasterxml.jackson.core</groupId> 
     <artifactId>jackson-databind</artifactId> 
     <version>2.4.1.1</version> 
    </dependency> 
    <!-- Json dependency --> 
6

this 문제를 제거하기 : 드디어 이런 pom.xml 파일과 함께 끝났다.

@Controller 
@RequestMapping("/API/course") 
@EnableWebMvc 
public class CourseController { 
@Autowired 
private com.item.DAO.CourseRepository courseRepository; 

@ResponseStatus(value=HttpStatus.OK) 
@RequestMapping(method=RequestMethod.GET) 
public @ResponseBody List<Course> getListOfCourse(){ 
    List<Course> courses = courseRepository.getListOfCourse(); 
    return courses ; 
} 

또는 XML 구성이 프로젝트에서 사용되는 경우 XML 구성 파일에 다음 줄을 추가하십시오. 당신의 pom.xml 파일에서

<?xml version="1.0" encoding="UTF-8"?> 
<beans xmlns="http://www.springframework.org/schema/beans" 
xmlns:mvc="http://www.springframework.org/schema/mvc" 
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
xsi:schemaLocation=" 
    http://www.springframework.org/schema/beans 
    http://www.springframework.org/schema/beans/spring-beans.xsd 
    http://www.springframework.org/schema/mvc 
    http://www.springframework.org/schema/mvc/spring-mvc.xsd"> 
<mvc:annotation-driven /> 
<bean> 

및 추가 다음과 같은 종속 관계 : - 당신의 치어에 의존 아래

<dependency> 
     <groupId>com.fasterxml.jackson.core</groupId> 
     <artifactId>jackson-databind</artifactId> 
     <version>2.4.1.3</version> 
    </dependency> 
    <dependency> 
     <groupId>com.fasterxml.jackson.core</groupId> 
     <artifactId>jackson-core</artifactId> 
     <version>2.4.1</version> 
    </dependency> 
    <dependency> 
     <groupId>com.fasterxml.jackson.core</groupId> 
     <artifactId>jackson-annotations</artifactId> 
     <version>2.4.1</version> 
    </dependency> 
+1

의존성을 추가하는 것만으로는 효과가 없습니다. @EnableWebMvc가 여기에 누락되었습니다. 고맙습니다! – Eduardo

+1

WOW @EnableMvcController 내 문제가 해결되었습니다. 정말 고맙습니다. 그러나 이것은 끔찍한 일이며, 우리는 썩은 스프링 인프라 위에 "수정"/ "해킹"을 추가하고 있습니다. 정말 짜증납니다. 나는 적절한 RestController 구조를 가지고 있었고 작동하지 않았고,이 "해킹"만이 도움이되었습니다. –

1

사용하여 POJO의 4

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

어쩌면 모든 필드 스프링 작업 게터와 세터가 필요합니다.

I는이 문제에 따라 고정 : 참조 : Spring MVC - HttpMediaTypeNotAcceptableException

406 버그를 수정하는 메시지 유용하지 않다. 코드로 디버깅하고 예외가 지구상에 무엇인지 확인해야합니다.

0

내 RestController에서 아래의 종속성과 @EnableWebMvc으로 나를 위해 일했습니다. 단지 jackson-databind 종속성을 추가했는지 확인하십시오.

<properties> 
    <spring-version>4.2.1.RELEASE</spring-version> 
    </properties> 

    <dependencies> 
    <dependency> 
     <groupId>org.springframework</groupId> 
     <artifactId>spring-core</artifactId> 
     <version>${spring-version}</version> 
    </dependency> 
    <dependency> 
     <groupId>org.springframework</groupId> 
     <artifactId>spring-webmvc</artifactId> 
     <version>${spring-version}</version> 
    </dependency> 
    <dependency> 
     <groupId>org.springframework</groupId> 
     <artifactId>spring-web</artifactId> 
     <version>${spring-version}</version> 
    </dependency> 
    <dependency> 
     <groupId>junit</groupId> 
     <artifactId>junit</artifactId> 
     <version>3.8.1</version> 
     <scope>test</scope> 
    </dependency> 
    <dependency> 
     <groupId>com.fasterxml.jackson.core</groupId> 
     <artifactId>jackson-databind</artifactId> 
     <version>2.5.3</version> 
    </dependency> 
    </dependencies> 
관련 문제