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>
<?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>
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;
}
}
@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());
}
}
}
@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.