2014-12-18 2 views
0

Exjts5와 함께 Spring MVC4를 사용하고 있는데 406 허용되지 않음 서버에 POST 요청을 보낼 때 허용되지 않는 오류가 발생했습니다.오류 406 허용되지 않는 Spring MVC 4 Extjs5 JSON 응답

의 web.xml :

<web-app version="2.4" 
    xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee 
http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd"> 

<display-name>Task Management</display-name> 

<servlet> 
    <servlet-name>mvc-dispatcher</servlet-name> 
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> 
    <load-on-startup>1</load-on-startup> 
</servlet> 

<servlet-mapping> 
    <servlet-name>mvc-dispatcher</servlet-name> 
    <url-pattern>/tasks/*</url-pattern> 
</servlet-mapping> 

디스패처 구성 :

@RequestMapping(value = "tasks/edit", 
     method = RequestMethod.POST, 
     produces = "application/json", 
     headers = "Accept=application/json") 
public 
@ResponseBody 
Result editTask(@RequestBody Task task) { 
    return managerService.updateTask(task); 
} 
: 여기

<beans xmlns="http://www.springframework.org/schema/beans" 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xmlns:context="http://www.springframework.org/schema/context" 
    xmlns:mvc="http://www.springframework.org/schema/mvc" 
    xsi:schemaLocation="http://www.springframework.org/schema/beans 
    http://www.springframework.org/schema/beans/spring-beans.xsd 
    http://www.springframework.org/schema/context 
    http://www.springframework.org/schema/context/spring-context.xsd 
    http://www.springframework.org/schema/mvc 
    http://www.springframework.org/schema/mvc/spring-mvc-4.0.xsd"> 

<context:component-scan base-package="com.spring.example.task.management.controller"/> 

<mvc:annotation-driven/> 
내 컨트롤러 여기

그리고 자바 스크립트 코드는 요청에 대응 :

var taskRecord = grid.getStore().getAt(rowIndex); 
    Ext.Ajax.request({ 
     url: 'tasks/tasks/edit', 
     method: 'POST', 
     jsonData: taskRecord.getBean(), 
     success: function (response) { 
      var obj = Ext.decode(response.responseText); 
      console.dir(obj); 
     }, 
     failure: function (response) { 
      console.log('server-side failure with status code ' + response.status); 
     } 
    }); 

의 pom.xml :

여기
<properties> 
     <spring.version>4.1.1.RELEASE</spring.version> 
     <jackson.version>2.4.4</jackson.version> 
    </properties>  
<dependencies> 
     <dependency> 
      <groupId>org.springframework</groupId> 
      <artifactId>spring-core</artifactId> 
      <version>${spring.version}</version> 
     </dependency> 

     <dependency> 
      <groupId>org.springframework</groupId> 
      <artifactId>spring-web</artifactId> 
      <version>${spring.version}</version> 
     </dependency> 

     <dependency> 
      <groupId>javax.servlet</groupId> 
      <artifactId>servlet-api</artifactId> 
      <version>2.5</version> 
     </dependency> 

     <dependency> 
      <groupId>javax.servlet.jsp</groupId> 
      <artifactId>jsp-api</artifactId> 
      <version>2.1</version> 
      <scope>provided</scope> 
     </dependency> 

     <dependency> 
      <groupId>org.springframework</groupId> 
      <artifactId>spring-webmvc</artifactId> 
      <version>${spring.version}</version> 
     </dependency> 

     <dependency> 
      <groupId>org.springframework</groupId> 
      <artifactId>spring-test</artifactId> 
      <version>${spring.version}</version> 
      <scope>test</scope> 
     </dependency> 

     <dependency> 
      <groupId>junit</groupId> 
      <artifactId>junit</artifactId> 
      <version>4.11</version> 
      <scope>test</scope> 
     </dependency> 

     <dependency> 
      <groupId>mysql</groupId> 
      <artifactId>mysql-connector-java</artifactId> 
      <version>5.1.6</version> 
     </dependency> 


     <!--Dependency Jackson --> 
     <dependency> 
      <groupId>com.fasterxml.jackson.core</groupId> 
      <artifactId>jackson-annotations</artifactId> 
      <version>${jackson.version}</version> 
     </dependency> 

     <dependency> 
      <groupId>com.fasterxml.jackson.core</groupId> 
      <artifactId>jackson-core</artifactId> 
      <version>${jackson.version}</version> 
     </dependency> 

     <dependency> 
      <groupId>com.fasterxml.jackson.core</groupId> 
      <artifactId>jackson-databind</artifactId> 
      <version>${jackson.version}</version> 
     </dependency> 
    </dependencies> 

가 Debuging 결과

Remote Address:127.0.0.1:8080 
Request URL:http://localhost:8080/tasks/tasks/edit 
Request Method:POST 
Status Code:406 Inacceptable 
**Request Headersview** 
Accept:*/* 
Accept-Encoding:gzip, deflate 
Accept-Language:fr-FR,fr;q=0.8,en-US;q=0.6,en;q=0.4,ar;q=0.2 
Connection:keep-alive 
Content-Length:121 
Content-Type:application/json 
Cookie:JSESSIONID=CEFED652722EA328C45ACCF08CF170B0 
Host:localhost:8080 
Origin:http://localhost:8080 
Referer:http://localhost:8080/ 
User-Agent:Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/39.0.2171.71 Safari/537.36 
X-Requested-With:XMLHttpRequest 
**Request Payloadview** 
{taskID: 3, taskName: "Implementation", taskDescription: "Implementation", taskPriority: "MEDIUM",…} 
taskDescription: "Implementation" 
taskID: 3 
taskName: "Implementation" 
taskPriority: "MEDIUM" 
taskStatus: "ACTIVE" 
**Response Headers** 
Content-Language:fr 
Content-Length:1110 
Content-Type:text/html;charset=utf-8 
Date:Thu, 18 Dec 2014 14:27:25 GMT 
Server:Apache-Coyote/1.1 

도와 youh 수 제발입니까?

은 내 문제에 대한 해결책을 발견

+0

@RequestMapping에서 'headers'및/또는'produce'를 지정하지 않으면 어떻게됩니까? – vadchen

+0

같은 결과 406 Inacceptable –

+0

''jsonData' 대신'params'를 사용하면 어떨까요? – Saki

답변

0

감사 :

오브젝트 내 컨트롤러 방법을 반환하지 않았다 "결과"게터/세터 자신의 속성

잭슨은/세터에 게터를 필요로

@RestController 
public class TaskManagerController { 
    TaskManagerService managerService = new TaskManagerService(); 

    @RequestMapping(value = "tasks/edit", 
      method = RequestMethod.POST, 
      headers = "Accept=application/json") 
    public Result editTask(@RequestBody Task task) { 
     return managerService.updateTask(task); 
    } 
} 

반환되는 객체와 클래스 "결과"를 생성하면 해당 같다 :

public class Result { 

    private String[] messages; 
    private String status; 
    private Integer code; 
    private Object resultObject; 

    public Result(String[] messages, String status, Integer code, Object resultObject) { 
     this.status = status; 
     this.messages = messages; 
     this.code = code; 
     this.resultObject = resultObject; 
    } 

    public static Result SUCCESS(String[] messages, Object resultObject) { 
     return new Result(messages, "SUCCESS", 200, resultObject); 
    } 

    public static Result FAILURE(String[] messages, Integer errorCode, Object resultObject) { 
     return new Result(messages, "FAILURE", errorCode, resultObject); 
    } 

    public String[] getMessages() { 
     return messages; 
    } 

    public void setMessages(String[] messages) { 
     this.messages = messages; 
    } 

    public String getStatus() { 
     return status; 
    } 

    public void setStatus(String status) { 
     this.status = status; 
    } 

    public Integer getCode() { 
     return code; 
    } 

    public void setCode(Integer code) { 
     this.code = code; 
    } 

    public Object getResultObject() { 
     return resultObject; 
    } 

    public void setResultObject(Object resultObject) { 
     this.resultObject = resultObject; 
    } 
} 
관련 문제