2014-10-28 11 views
14

avere seguenti dati nella mia pom.xml406 Spring MVC JSON, non è accettabile in base alla richiesta di "accettare" le intestazioni

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

applicazione-config.xml:

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

pagina JSP:

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

controller:

@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; 
    } 
} 

sto invocando il mio url come:

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

Dopo aver cliccato sul pulsante, che restituisce l'URL come http://lt-50k7sy1:8080/QuickBooks-UX/syncAccounts restituisce 406 e la descrizione è:

la risorsa identificata da questa richiesta è solo in grado di generare risposte con caratteristiche non accettabili secondo la richiesta intestazioni "accettate"

Ho seguito questo Link, ma nessun risultato.

+2

Faced problema simile, e seguì http://stackoverflow.com/questions/26416248/srping-4-1-1-release-and-responsebody-return-http-406 – RE350

risposta

43

Add seguente jar al file pom.xml che è richiesto per la primavera 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

Grazie, è utile (Ho usato la versione 2.4.3). Utile anche la guida alla migrazione http://xpadro.blogspot.ca/2014/01/migrating-spring-mvc-restful-web.html. – rodche

1

Grazie è risolto il mio problema. Alla fine ho finito con un pom.xml come questo:

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

Sbarazzarsi della this problemi con l'aggiunta di @EnableWebMvc nella classe Controller.

@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 ; 
} 

oppure aggiungere la seguente riga nel file di configurazione xml se la configurazione XML viene utilizzata nel progetto.

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

e aggiungere seguenti dipendenze nel file 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

Solo l'aggiunta di dipendenze non ha funzionato per me. @EnableWebMvc mancava qui. Grazie! – Eduardo

+1

WOW @EnableMvcController ha risolto il problema. Grazie mille. Ma questo è orribile, stiamo aggiungendo alcune "correzioni"/"hack" in cima a un'infrastruttura di Primavera marcio, fa davvero schifo. Avevo una struttura RestController adeguata, e non funzionava, solo questo "hack" mi ha aiutato. –

1

Usa sotto la dipendenza nel vostro pom lavorare con molla 4.

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

Forse tutti i campi della vostra POJO bisogno di Getter e Setter.

ho fissato in base a questo problema: di riferimento: Spring MVC - HttpMediaTypeNotAcceptableException

E 406 non è un messaggio utile per risolvere il bug. Dovresti eseguire il debug dei codici e vedere cos'è l'Eccezione sulla terra.

0

Ha funzionato per me con le seguenti dipendenze e @EnableWebMvc nel mio RestController, Si prega di vedere che ho appena aggiunto la dipendenza 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> 
Problemi correlati