2014-10-28 82 views
14

在我的pom.xml以下細節406 Spring 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; 
    } 
} 

我調用我的網址爲:

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

點擊按鈕,返回URL作爲 http://lt-50k7sy1:8080/QuickBooks-UX/syncAccounts這將返回406和描述後是:

由該請求標識的資源是僅能夠生成 響應特性不符合要求 「接受」標題

我跟着這Link,但沒有結果。

+2

面臨着類似的問題,其次http://stackoverflow.com/questions/26416248/srping-4-1-1-release-and-responsebody-return-http-406 – RE350 2014-10-28 18:24:16

回答

43

添加以下jar到你的pom.xml文件,它需要彈簧4.1。*

<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 2014-11-11 19:23:07

1

由於它解決了我的問題。通過在控制器類中添加@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配置文件中添加以下行。

<?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> 

,並添加在你的pom.xml文件以下相關: -

<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 2016-02-07 16:50:34

+1

WOW @EnableMvcController修復了我的問題。非常感謝。但是這太可怕了,我們在一個爛的Spring基礎設施上增加了一些「修復」/「黑客」,這真的很糟糕。我有一個適當的RestController結構,它不工作,只有這個「黑客」幫助。 – 2017-11-22 16:48:55

1

使用下面的POM依賴與彈簧工作4

<dependency> 
    <groupId>com.fasterxml.jackson.core</groupId> 
    <artifactId>jackson-databind</artifactId> 
    <version>2.5.3</version> 
</dependency> 
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>