Solucionado (ver solução)
Solucionado
(ver solução)
4
respostas

Utilizando o PathVariable com Spring

Cliquei em resolver tópio sem querer; https://cursos.alura.com.br/forum/topico-utilizando-o-pathvariable-com-spring-112866

Erro quando passo acento na URI:

O meu código

@GetMapping("/detalhes/{name}") public DetalhesDoTopicoDto detalhesName(@PathVariable String name) { DetalhesDoTopicoDto dto = new DetalhesDoTopicoDto(name);

return dto;

}

Retorno servidor:

2020-05-15 11:34:00.516 INFO 8856 --- [nio-8088-exec-4] o.apache.coyote.http11.Http11Processor : Error parsing HTTP request header Note: further occurrences of HTTP request parsing errors will be logged at DEBUG level.

java.lang.IllegalArgumentException: Invalid character found in the request target. The valid characters are defined in RFC 7230 and RFC 3986 at org.apache.coyote.http11.Http11InputBuffer.parseRequestLine(Http11InputBuffer.java:474) ~[tomcat-embed-core-9.0.17.jar:9.0.17] at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:294) ~[tomcat-embed-core-9.0.17.jar:9.0.17] at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:66) [tomcat-embed-core-9.0.17.jar:9.0.17] at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:834) [tomcat-embed-core-9.0.17.jar:9.0.17] at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1415) [tomcat-embed-core-9.0.17.jar:9.0.17] at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49) [tomcat-embed-core-9.0.17.jar:9.0.17] at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) [na:1.8.0_11] at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) [na:1.8.0_11] at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61) [tomcat-embed-core-9.0.17.jar:9.0.17] at java.lang.Thread.run(Thread.java:745) [na:1.8.0_11]

URI teste: http://localhost:8088/topicos/detalhes/técnica

Onde posso configurar o UTF-8

Retorno Postman

<!doctype html> <html lang="en">

<head> <title>HTTP Status 400 – Bad Request</title> <style type="text/css"> h1 { font-family: Tahoma, Arial, sans-serif; color: white; background-color: #525D76; font-size: 22px; }

    h2 {
        font-family: Tahoma, Arial, sans-serif;
        color: white;
        background-color: #525D76;
        font-size: 16px;
    }

    h3 {
        font-family: Tahoma, Arial, sans-serif;
        color: white;
        background-color: #525D76;
        font-size: 14px;
    }

    body {
        font-family: Tahoma, Arial, sans-serif;
        color: black;
        background-color: white;
    }

    b {
        font-family: Tahoma, Arial, sans-serif;
        color: white;
        background-color: #525D76;
    }

    p {
        font-family: Tahoma, Arial, sans-serif;
        background: white;
        color: black;
        font-size: 12px;
    }

    a {
        color: black;
    }

    a.name {
        color: black;
    }

    .line {
        height: 1px;
        background-color: #525D76;
        border: none;
    }
</style>

HTTP Status 400 – Bad Request


Type Exception Report

Message Invalid character found in the request target. The valid characters are defined in RFC 7230 and RFC 3986

Description The server cannot or will not process the request due to something that is perceived to be a client error (e.g., malformed request syntax, invalid request message framing, or deceptive request routing).

Exception

java.lang.IllegalArgumentException: Invalid character found in the request target. The valid characters are defined in RFC 7230 and RFC 3986
    org.apache.coyote.http11.Http11InputBuffer.parseRequestLine(Http11InputBuffer.java:474)
    org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:294)
    org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:66)
    org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:834)
    org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1415)
    org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49)
    java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
    java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
    org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
    java.lang.Thread.run(Thread.java:745)

Note The full stack trace of the root cause is available in the server logs.


Apache Tomcat/9.0.17

``
4 respostas

Fred,

Qual a versão do Spring Boot que você está utilizando?

Na versão utilizada no curso(2.1.4) o problema não ocorre, então pode ser alguma mudança no Tomcat adicionada na versão que você está utilizando.

É o projeto que foi disponibilizado no começo do curso.

Agora baixei o projeto da aula anterior que esta disponível na aula 06 e continua o mesmo erro quando passo acento na URI.

<parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>2.1.4.RELEASE</version> <relativePath/> <!-- lookup parent from repository --> </parent> <groupId>br.com.alura</groupId> <artifactId>forum</artifactId> <version>0.0.1-SNAPSHOT</version> <name>forum</name> <description>Demo project for Spring Boot</description>

solução!

Fred,

Descobri aqui que o problema é o Postman.

Se você acessar diretamente no navegador a URL http://localhost:8088/topicos/detalhes/técnica vai funcionar normalmente.

Isso porque o browser faz um escape automático dos caracteres especiais e envia a requisição assim: http://localhost:8088/topicos/detalhes/t%C3%A9cnica

No Postman se você colar uma url com acento ele faz o escape automático, mas se digitar manualmente a url com acento ele não corrige e aí acontece o problema.

Olá Rodrigo,

Mais um curso seu fantástico e com as dúvidas todas resolvidas.

Muito obrigado pelo retorno pela atenção.