Spring + JSON : HTTP Status 406 [RESOLVIDO]

1 resposta
L

Bom dia, estou tentando chamar um json (por enquanto digitando o caminho no browser) e estou recebendo o erro 406. Eu ainda não implementei a requisição ajax para este json, por enquanto estou chamando a URL direto no browser assim: http://localhost:8084/MeuApp/monitor/desativar/1

As configurações do meu projeto são:

web.xml
<?xml version="1.0" encoding="UTF-8"?>
<web-app version="3.0" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd">
    
    <display-name>MeuApp</display-name>
    
    <welcome-file-list>
        <welcome-file>login.jsp</welcome-file>
    </welcome-file-list>
    
    <context-param>
        <param-name>contextConfigLocation</param-name>
        <param-value>
            /WEB-INF/spring-servlet.xml
        </param-value>
    </context-param>
    
    <!-- SPRING SECURITY --> 
    <filter>
        <filter-name>springSecurityFilterChain</filter-name>
        <filter-class>org.springframework.web.filter.DelegatingFilterProxy</filter-class>
    </filter>

    <filter-mapping>
        <filter-name>springSecurityFilterChain</filter-name>
        <url-pattern>/*</url-pattern>
    </filter-mapping>
    
    <!-- SPRING FRAMEWORK -->
    <servlet>
        <servlet-name>spring</servlet-name>
        <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
	<load-on-startup>1</load-on-startup>
    </servlet>
    
    <servlet-mapping>
        <servlet-name>spring</servlet-name>
        <url-pattern>/</url-pattern>
    </servlet-mapping> 
    
    <listener>
        <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
    </listener>
    
    <servlet-mapping>
        <servlet-name>default</servlet-name>
        <url-pattern>*.css</url-pattern>
    </servlet-mapping>
    <servlet-mapping>
        <servlet-name>default</servlet-name>
        <url-pattern>*.js</url-pattern>
    </servlet-mapping>
    <servlet-mapping>
        <servlet-name>default</servlet-name>
        <url-pattern>*.png</url-pattern>
    </servlet-mapping>
    <servlet-mapping>
        <servlet-name>default</servlet-name>
        <url-pattern>*.json</url-pattern>
    </servlet-mapping>
</web-app>
spring-servelt.xml
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns:sec="http://www.springframework.org/schema/security"
       xmlns:mvc="http://www.springframework.org/schema/mvc"
       xmlns:context="http://www.springframework.org/schema/context"
       xsi:schemaLocation="
		http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
		http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.0.xsd
		http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-3.0.xsd
                http://www.springframework.org/schema/security http://www.springframework.org/schema/security/spring-security-3.0.3.xsd">
                    
                    
    <!-- SPRING FRAMEWORK -->
    <context:annotation-config />
    <mvc:annotation-driven />
    
    <context:component-scan base-package="br.com.meuapp" />
        
    <bean id="viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver">
        <property name="viewClass" value="org.springframework.web.servlet.view.JstlView" />
        <property name="prefix" value="/WEB-INF/jsp/" />
        <property name="suffix" value=".jsp" />
    </bean>
    
    <!-- SPRING DATABASE -->
    <import resource="spring-database.xml" />
    
    
    <!-- SPRING SECURITY -->
    <sec:http auto-config="true" use-expressions="true" access-denied-page="/denied.jsp">
        <sec:intercept-url pattern="/entidade/**" access="hasRole('ROLE_ADMIN')" />
        <sec:intercept-url pattern="/monitor/**" access="hasRole('ROLE_ADMIN')" />
        <sec:intercept-url pattern="/usuario/**" access="hasRole('ROLE_MANAGER')" />
        <sec:intercept-url pattern="/manager/**" access="hasRole('ROLE_USER')" />
        <sec:intercept-url pattern="/home/**" access="hasRole('ROLE_USER')" />
   
        <sec:form-login
            login-page="/login.jsp" default-target-url="/home"
            authentication-failure-url="/login.jsp?error=true" />
    
        <sec:logout
            invalidate-session="true"
            logout-success-url="/login.jsp" />
    </sec:http>
  
    <sec:authentication-manager>
        <sec:authentication-provider user-service-ref="customUserDetailsService" />
    </sec:authentication-manager>
     
    <bean id="customUserDetailsService" 
          class="br.com.meuapp.service.CustomUserDetailsService" />

</beans>
JSONController.java
public class JSONController<T> {
    protected Class<T> classVO = null;

    public JSONController() {
        this.classVO = (Class<T>) ((ParameterizedType) getClass().getGenericSuperclass()).getActualTypeArguments()[0];     
    }
    
    /**
     * Generates modelMap to return in the modelAndView
     *
     * @param List<T> lista
     * @return
     */
    protected Map<String, Object> getMap(List<T> lista) {

        Map<String, Object> modelMap = new HashMap<String, Object>(3);
        modelMap.put("total", lista.size());
        modelMap.put("data", lista);
        modelMap.put("success", true);

        return modelMap;
    }

    /**
     * Generates modelMap to return in the modelAndView in case of exception
     *
     * @param msg message
     * @return
     */
    protected Map<String, Object> getModelMapError(String msg, String detail) {

        Map<String, Object> modelMap = new HashMap<String, Object>(2);
        modelMap.put("message", msg);
        modelMap.put("detail", detail);
        modelMap.put("success", false);

        return modelMap;
    }
}
MonitorController.java
@Controller
public class MonitorController extends JSONController<ConfigEmailVO> {
    @Autowired
    private MonitorService service;
    
    @RequestMapping(value="/monitor/desativar/{id}", method = RequestMethod.GET)
    public @ResponseBody Map<String, ? extends Object> desativar(@PathVariable("id") Integer id) {
        try {
            ConfigEmailVO vo = service.desativar(id);
            List<ConfigEmailVO> dados = new ArrayList<ConfigEmailVO>();
            dados.add(vo);
            return getMap(dados);
        } catch (Exception e) {
            return getModelMapError("Não foi possível desativar o monitoramento.", e.getMessage());
        }
    }    
}
MonitorService.java
@Service
public class MonitorService {
    
    @Autowired
    private ConfigEmailDAO dao;
    
    @Transactional
    public ConfigEmailVO desativar(Integer id) {
        ConfigEmailVO found = dao.findById(id);
        found.setMonitorar("N");
        dao.update(found);

        return found;
    }
}

Desde já agradeço a ajuda.

1 Resposta

L

Resolvi o problema adicionado duas jar no meu projeto: jackson-core-asl-1.4.3.jar e jackson-mapper-asl-1.4.3.jar.

Obrigado!

Criado 6 de junho de 2012
Ultima resposta 6 de jun. de 2012
Respostas 1
Participantes 1