[SPRING] 406 봄 MVC Json, 요청에 따라 허용되지 않는 "accept"헤더
SPRING406 봄 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.스프링 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.컨트롤러 클래스에 @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.고마워, 내 문제가 해결되었습니다. 나는 결국 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로 작업하는 pom에서 아래의 의존성을 사용하십시오.
스프링 4로 작업하는 pom에서 아래의 의존성을 사용하십시오.
<dependency> <groupId>com.fasterxml.jackson.core</groupId> <artifactId>jackson-databind</artifactId> <version>2.5.3</version> </dependency>
-
==============================
5.어쩌면 POJO의 모든 필드에 Getter와 Setter가 필요할 수도 있습니다.
어쩌면 POJO의 모든 필드에 Getter와 Setter가 필요할 수도 있습니다.
나는이 문제에 따라 그것을 고쳤다. 참조 : 봄 MVC - HttpMediaTypeNotAcceptableException
그리고 406은 버그를 수정하는 유용한 메시지가 아닙니다. 코드로 디버깅하고 예외가 지구상에 무엇인지 확인해야합니다.
-
==============================
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>
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
'SPRING' 카테고리의 다른 글
[SPRING] Spring으로 속성을 재로드하는 방법? (0) | 2018.12.26 |
---|---|
[SPRING] Spring MVC 406은 JSON 응답 대신 허용되지 않는다. (0) | 2018.12.25 |
[SPRING] Spring 애플리케이션 컨텍스트 : web.xml 컨텍스트 매개 변수에 액세스 하시겠습니까? (0) | 2018.12.25 |
[SPRING] 스프링을 이용한 동적 폼을위한 더 좋은 방법은? (0) | 2018.12.25 |
[SPRING] 어노테이션은 무엇이며 스프링과 같은 프레임 워크에서 실제로 어떻게 작동합니까? (0) | 2018.12.25 |