7
respostas

Método Allowed - Problemas com REST JAVA

Boa noite, estou tendo problemas numa aplicação REST. Está gerando o seguinte erro:

The method received in the request-line is known by the origin server but not supported by the target resource.

O Método esta vindo por POST, segue o código:

package br.com.festivalRest.rest.authentication;

import java.sql.Connection;
import java.util.ArrayList;
import java.util.List;

import javax.ws.rs.Consumes;
import javax.ws.rs.core.Response;
import javax.ws.rs.POST;
import javax.ws.rs.Path;
import javax.ws.rs.PathParam;
import javax.ws.rs.Produces;
import javax.ws.rs.core.MediaType;

import org.codehaus.jackson.map.ObjectMapper;

import br.com.festivalRest.bd.conexao.Conexao;
import br.com.festivalRest.jdbc.JDBCAuthenticationDAO;
import br.com.festivalRest.objetos.User;

@Path("authenticationRest")
public class AuthenticationRest extends UtilRest {

    public AuthenticationRest(){
    }

    @POST
    @Path("/foundUser")
    @Consumes("application/*")
    public Response foundUser(String contatoParam){
        System.out.println(contatoParam);
        try{

            User user = new ObjectMapper().readValue(contatoParam, User.class);

            Conexao conec = new Conexao();
            Connection conexao = conec.abrirConexao();
            JDBCAuthenticationDAO jdbcAuthentication = new JDBCAuthenticationDAO(conexao);
            jdbcAuthentication.foundUser(user);
            conec.fecharConexao();

            return this.buildResponse("OK");

        }catch(Exception e){
            e.printStackTrace();
            return this.buildErrorResponse("Falha");
        }
    }
}
function foundUser(){

    $.ajax({
        type: "POST",
        url: "rest/authenticationRest/foundUser",
        data: $("#authentication").serialize(),
        success:function(date){
            alert("Teste");
        },error(err){
            console.log(err);
            alert("Erro ao processar a requisição " + err.responseText);
        }

    });
}
package br.com.festivalRest.jdbc;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.ArrayList;
import java.util.List;
import br.com.festivalRest.rest.jdbcinterface.FestivalDAO;
import br.com.festivalRest.objetos.User;

public class JDBCAuthenticationDAO implements FestivalDAO {
    private Connection conexao;

    public JDBCAuthenticationDAO(Connection conexao){
        this.conexao = conexao;
    }

    public boolean foundUser(User user){

        boolean checkUser = false;

        String comando = "select * from usuarios where login = ? and senha = ?";
        PreparedStatement p;

        ResultSet rs = null;

        try{
            p = this.conexao.prepareStatement(comando);
            p.setString(1, user.getLogin());
            p.setString(1, user.getSenha());
            rs = p.executeQuery();

            if(rs.next()){

                checkUser = true;

            }
        } catch(Exception e){
            e.printStackTrace();
        }

        return checkUser;
    }

}
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" id="WebApp_ID" version="2.5">
  <display-name>Festival</display-name>
  <welcome-file-list>
    <welcome-file>index.html</welcome-file>
    <welcome-file>index.htm</welcome-file>
    <welcome-file>index.jsp</welcome-file>
    <welcome-file>default.html</welcome-file>
    <welcome-file>default.htm</welcome-file>
    <welcome-file>default.jsp</welcome-file>
  </welcome-file-list>

  <servlet>
      <servlet-name>Jersey REST Service</servlet-name>
      <servlet-class>com.sun.jersey.spi.container.servlet.ServletContainer</servlet-class>

      <init-param>
          <param-name>com.sun.jersey.config.property.packages</param-name>
          <param-value>br.com.festivalRest</param-value>
      </init-param>
      <load-on-startup>1</load-on-startup>
  </servlet>
  <servlet-mapping>
      <servlet-name>Jersey REST Service</servlet-name>
      <url-pattern>/rest/*</url-pattern>
  </servlet-mapping>
</web-app>
7 respostas

No console ta informando que o método de envio está post? se tiver, realmente ta bem estranho.. vai ter que habilitar o log na aplicação e tudo mais, para que possamos entender o que pode estar acontecendo.

Esta dando o seguinte erro no console.

org.codehaus.jackson.JsonParseException: Unexpected character ('u' (code 117)): expected a valid value (number, String, array, object, 'true', 'false' or 'null')
 at [Source: java.io.StringReader@18eb4ecd; line: 1, column: 2]
    at org.codehaus.jackson.JsonParser._constructError(JsonParser.java:1432)
    at org.codehaus.jackson.impl.JsonParserMinimalBase._reportError(JsonParserMinimalBase.java:385)
    at org.codehaus.jackson.impl.JsonParserMinimalBase._reportUnexpectedChar(JsonParserMinimalBase.java:306)
    at org.codehaus.jackson.impl.ReaderBasedParser._handleUnexpectedValue(ReaderBasedParser.java:1192)
    at org.codehaus.jackson.impl.ReaderBasedParser.nextToken(ReaderBasedParser.java:479)
    at org.codehaus.jackson.map.ObjectMapper._initForReading(ObjectMapper.java:2761)
    at org.codehaus.jackson.map.ObjectMapper._readMapAndClose(ObjectMapper.java:2709)
    at org.codehaus.jackson.map.ObjectMapper.readValue(ObjectMapper.java:1854)
    at br.com.festivalRest.rest.authentication.AuthenticationRest.foundUser(AuthenticationRest.java:33)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:498)
    at com.sun.jersey.spi.container.JavaMethodInvokerFactory$1.invoke(JavaMethodInvokerFactory.java:60)
    at com.sun.jersey.server.impl.model.method.dispatch.AbstractResourceMethodDispatchProvider$ResponseOutInvoker._dispatch(AbstractResourceMethodDispatchProvider.java:205)
    at com.sun.jersey.server.impl.model.method.dispatch.ResourceJavaMethodDispatcher.dispatch(ResourceJavaMethodDispatcher.java:75)
    at com.sun.jersey.server.impl.uri.rules.HttpMethodRule.accept(HttpMethodRule.java:288)
    at com.sun.jersey.server.impl.uri.rules.RightHandPathRule.accept(RightHandPathRule.java:147)
    at com.sun.jersey.server.impl.uri.rules.ResourceClassRule.accept(ResourceClassRule.java:108)
    at com.sun.jersey.server.impl.uri.rules.RightHandPathRule.accept(RightHandPathRule.java:147)
    at com.sun.jersey.server.impl.uri.rules.RootResourceClassesRule.accept(RootResourceClassesRule.java:84)
    at com.sun.jersey.server.impl.application.WebApplicationImpl._handleRequest(WebApplicationImpl.java:1469)
    at com.sun.jersey.server.impl.application.WebApplicationImpl._handleRequest(WebApplicationImpl.java:1400)
    at com.sun.jersey.server.impl.application.WebApplicationImpl.handleRequest(WebApplicationImpl.java:1349)
    at com.sun.jersey.server.impl.application.WebApplicationImpl.handleRequest(WebApplicationImpl.java:1339)
    at com.sun.jersey.spi.container.servlet.WebComponent.service(WebComponent.java:416)
    at com.sun.jersey.spi.container.servlet.ServletContainer.service(ServletContainer.java:537)
    at com.sun.jersey.spi.container.servlet.ServletContainer.service(ServletContainer.java:699)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:742)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:231)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
    at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:53)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:199)
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:96)
    at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:475)
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:140)
    at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:80)
    at org.apache.catalina.valves.AbstractAccessLogValve.invoke(AbstractAccessLogValve.java:624)
    at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:87)
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:342)
    at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:498)
    at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:66)
    at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:796)
    at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1368)
    at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
    at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
    at java.lang.Thread.run(Thread.java:745)

Tem certeza que o método serialize() ta gerando um JSON?

Como eu posso verificar isso?

Oi Maria, olha no console do navegador o parâmetro sendo enviado.. deve ta indo no formato padrão.. vc precisa converter os dados do formulário para o json.

Da forma que fiz não está correto a conversão? Fiz alguns testes pelo Postman também, e ele sempre cai na minha exception que mostra o código que postei a cima

Oi Maria, acho que não está correto.. o melhor é você definir um content-type para o que você quer receber e passar o argumetno no formato definido. Já chegou a fazer o curso de jax-rs aqui da plataforma? E ali, você ta recebendo apenas uma string, o melhor era receber um objeto que seria criado a partir do seu json. Claro que você também pode usar o content-type "application/x-www-form-urlencoded". Se esses conceitos estão obscuros(você quem vai dizer :)), sugiro o curso.