복붙노트

[SPRING] 406 봄 MVC Json, 요청에 따라 허용되지 않는 "accept"헤더

SPRING

406 봄 MVC Json, 요청에 따라 허용되지 않는 "accept"헤더

내 pom.xml에 다음과 같은 세부 사항이있다.

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

application-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/quickBooks

버튼을 클릭하면 url을 다음과 같이 반환합니다. http : // lt-50k7sy1 : 8080 / QuickBooks-UX / syncAccounts는 406을 반환하고 설명은 다음과 같습니다.

나는이 링크를 따라 갔지만 결과는 없다.

해결법

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

    1.스프링 4.1에 필요한 pom.xml 파일에 다음 jar 파일을 추가하십시오. *

    스프링 4.1에 필요한 pom.xml 파일에 다음 jar 파일을 추가하십시오. *

    <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>
    
  2. ==============================

    2.컨트롤러 클래스에 @EnableWebMvc를 추가하여이 문제를 제거하십시오.

    컨트롤러 클래스에 @EnableWebMvc를 추가하여이 문제를 제거하십시오.

    @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>
    
  3. ==============================

    3.고마워, 내 문제가 해결되었습니다. 나는 결국 pom.xml로 끝났다.

    고마워, 내 문제가 해결되었습니다. 나는 결국 pom.xml로 끝났다.

    <!-- 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 -->
    
  4. ==============================

    4.스프링 4로 작업하는 pom에서 아래의 의존성을 사용하십시오.

    스프링 4로 작업하는 pom에서 아래의 의존성을 사용하십시오.

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

    5.어쩌면 POJO의 모든 필드에 Getter와 Setter가 필요할 수도 있습니다.

    어쩌면 POJO의 모든 필드에 Getter와 Setter가 필요할 수도 있습니다.

    나는이 문제에 따라 그것을 고쳤다. 참조 : 봄 MVC - HttpMediaTypeNotAcceptableException

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

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

    6.그것은 나를 위해 아래 종속성과 내 RestController에서 @EnableWebMvc와 함께 일했습니다, 제발 jackson-databind 종속성을 추가했는지 확인하십시오.

    그것은 나를 위해 아래 종속성과 내 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>
    
  7. from https://stackoverflow.com/questions/26615416/406-spring-mvc-json-not-acceptable-according-to-the-request-accept-headers by cc-by-sa and MIT license