2015-03-07 4 views
5

Guida - cos'altro posso fare per correggere questo errore? org.springframework.web.HttpMediaTypeNotAcceptableException :: Impossibile trovare una rappresentazione accettabile.HttpMediaTypeNotAcceptableException: Impossibile trovare la rappresentazione accettabile mvc 4.1.5 con com.fasterxml 2.5.1

Penso che il mio progetto sia configurato correttamente per gestire le richieste restanti di JSON. Negli ultimi giorni, ho letto e applicato vari suggerimenti inutilmente. Ci sono altre idee su che cosa dovrei fare diversamente?

Sto utilizzando Spring MVC 4.1.5 e com.fasterxml 2.5.1.

Una parte del mio pom.xml

<dependency> 
    <groupId>com.fasterxml.jackson.core</groupId> 
    <artifactId>jackson-annotations</artifactId> 
    <version>2.5.1</version> 
    <type>bundle</type> 
</dependency> 
<dependency> 
    <groupId>com.fasterxml.jackson.core</groupId> 
    <artifactId>jackson-core</artifactId> 
    <version>2.5.1</version> 
    <type>bundle</type> 
</dependency> 
<dependency> 
    <groupId>com.fasterxml.jackson.core</groupId> 
    <artifactId>jackson-databind</artifactId> 
    <version>2.5.1</version> 
    <type>bundle</type> 
</dependency> 

Ecco parte della mia web.xml mia

<!-- Creates the Spring Container shared by all Servlets and Filters --> 
<listener> 
    <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class> 
</listener> 

<!-- Processes application requests --> 
<servlet> 
    <servlet-name>appServlet</servlet-name> 
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> 
    <init-param> 
     <param-name>contextConfigLocation</param-name> 
     <param-value> 
      /WEB-INF/spring/appServlet/servlet-context.xml 
     </param-value> 
    </init-param> 
    <load-on-startup>1</load-on-startup> 
</servlet> 

<servlet-mapping> 
    <servlet-name>appServlet</servlet-name> 
    <url-pattern>/</url-pattern> 
</servlet-mapping> 

Ecco parte della mia servlet-context.xml

<!-- Enables the Spring MVC @Controller programming model --> 
<annotation-driven /> 

<!-- Handles HTTP GET requests for /resources/** by efficiently serving up static resources in the ${webappRoot}/resources directory --> 
<resources mapping="/resources/**" location="/resources/" /> 

<!-- Resolves views selected for rendering by @Controllers to .jsp resources in the /WEB-INF/views directory --> 
<beans:bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"> 
    <beans:property name="prefix" value="/WEB-INF/views/" /> 
    <beans:property name="suffix" value=".jsp" /> 
</beans:bean> 

<context:component-scan base-package="com.losgatos"> 
    <context:include-filter type="annotation" expression="org.springframework.web.bind.annotation.ControllerAdvice" /> 
</context:component-scan> 

Ecco il mio controller

package com.losgatos.controllers; 

import org.springframework.web.bind.annotation.RequestMapping; 
import org.springframework.web.bind.annotation.RestController; 

import com.losgatos.User; 

@RestController 
@RequestMapping("user") 
public class UserController { 

    @RequestMapping(value = "data", produces="application/json") 
    public User getUser(){ 
     return new User(); 
    } 
} 

Ecco il POJO utente Utente

package com.losgatos; 

import java.util.EnumSet; 

public class User { 

    public User(){ 
     id = 0; 
     age = 22; 
     name = "Titus Feng"; 
     alias = "tornado tie"; 
     roles = EnumSet.of(Role.NORMAL, Role.NEW); 
    } 

    private int id, age; 
    private String name, alias; 
    private EnumSet<Role> roles; 

    //added getters and setters here 

    public enum Role{ 
     NEW, NORMAL, ADMIN, MEMBER, DORMANT 
    } 
} 
+0

puoi mostrarci la configurazione AJAX come si chiama il servizio REST? – Rembo

+0

Al momento, sto chiamando http: // localhost: 8080/user/data direttamente dal browser solo per verificare che funzioni come previsto – 000

+0

Vedere anche http://stackoverflow.com/questions/28466207/could-not- find-accept-representation-using-spring-boot-starter-web –

risposta

1

ho ottenuto di lavorare finalmente da:
rimozione <type>bundle</type> dai miei fasterxml.jackson voci pom.xml
eseguire nuovamente il mio file pom.xml
pulizia della costruzione del progetto (progetto -> pulita)
pulizia e riavvio del server

0

Nel file di configurazione di primavera contesto (dispatcher-servlet.xml) si ha:

<context:component-scan base-package="com.losgatos"> 
    <context:include-filter type="annotation" expression="org.springframework.web.bind.annotation.ControllerAdvice" /> 
</context:component-scan> 

e il controller è annotata con:

@RestController 
@RequestMapping("user") 
public class UserController { 
... 
} 

la classe controller non verrà caricata sul contenitore. BTW secondo il vostro messaggio di eccezione:

I am getting the error

org.springframework.web.HttpMediaTypeNotAcceptableException:: Could not find acceptable representation.

Questa eccezione solleva quando non si è registrato il seguente in un contesto di file:

  • <mvc:annotation-driven /> (non si è registrato nel vostro file di contesto)
  • Se necessario I JAR non sono presenti su classpath, (lo hai già)
  • Quando ENUM viene utilizzato, annotare la tua classe ENUM con @JsonFormat(shape= JsonFormat.Shape.OBJECT)

EDIT: testato lavorando bene per me, con la primavera 4.0.1.RELEASE e sotto dipendenza da un unico JSON:

com.fasterxml.jackson.core jackson-databind 2.4.3

e regolatore classe:

@RestController 
@RequestMapping("/u") 
public class UserRestController { 

    @RequestMapping(value = "/data", produces="application/json") 
    public RestUser getUser(){ 
     return new RestUser(); 
    } 
} 

ottenuto:

{"id":0,"age":22,"name":"Titus Feng","alias":"tornado tie","roles":["NEW","NORMAL"]} 

Suggerimento, cambiamento questo:

<context:component-scan base-package="com.losgatos"> 
    <context:include-filter type="annotation" expression="org.springframework.web.bind.annotation.ControllerAdvice" /> 
</context:component-scan> 

a:

<context:component-scan base-package="com.losgatos"> 
    <context:include-filter type="annotation" expression="org.springframework.web.bind.annotation.RestController" /> 
</context:component-scan> 
+0

Grazie per l'input, @Rembo. Il mio file di contesto di primavera usa già . La versione Spring preferisce . Ho annotato la classe ENUM con @JsonFormat (shape = JsonFormat.Shape.OBJECT) ma continuo a ricevere lo stesso messaggio di errore. – 000

+0

manca la regola di sostituzione scansione componente suggerita. Potresti aggiungerlo? – 000

+0

hey @Rembo, potresti aggiungere la regola di scansione del componente di sostituzione mancante? – 000

1

Spring Framework 4.1 raised some dependencies requirements; è necessario aggiornare Jackson alla versione 2.3 o successiva. Si noti che il gruppo di risorse utente è cambiato in com.fasterxml.

+0

Grazie per avermi fatto sapere, @ Brian. Ho sostituito l'org.codehaus con le librerie core.fasterxml. Ho continuato a ottenere lo stesso errore: classe org.springframework.web.HttpMediaTypeNotAcceptableException verificato :: Impossibile trovare rappresentazione accettabile I errori anche notato nei tag fasterxml dipendenza del mio file pom.xml che dicono mancante com artefatto. fasterxml.jackson.core: jackson-core: bundle: 2.5.1 Non ha impedito a Maven di installare le dipendenze core.fasterxml sebbene sia buono. – 000

Problemi correlati