Mon application est démarrée avec Java -jar avec la version 1.5.6.RELEASE de Spring Boot.
Le contenu d'une de mes requêtes a le caractère "{" .Lorsqu'il est envoyé au serveur, l'exception suivante est levée:
Java.lang.IllegalArgumentException: caractère non valide trouvé dans la cible de la demande. Les caractères valides sont définis dans RFC 7230 et RFC 3986 sur org.Apache.coyote.http11.Http11InputBuffer.parseRequestLine (Http11InputBuffer.Java:472) sur org.Apache.coyote.http11.Http11Processor.service (Http11Processor) org.Apache.coyote.AbstractProcessorLight.process (AbstractProcessorLight.Java:66) sur org.Apache.coyote.AbstractProtocol $ ConnectionHandler.process (AbstractProtocol.Java:868) sur org.Apache.Tomcat.util.net.NioEndpoint $ SocketProcessor. doRun (NioEndpoint.Java:1455) sur org.Apache.Tomcat.util.net.SocketProcessorBase.run (SocketProcessorBase.Java:49) sur Java.util.concurrent.ThreadPoolExecutor.runWorker (ThreadPoolExecutor.Java:1142) sur Java.util .concurrent.ThreadPoolExecutor $ Worker.run (ThreadPoolExecutor.Java:617) sur org.Apache.Tomcat.util.threads.TaskThread $ WrappingRunnable.run (TaskThread.Java:61) sur Java.lang.Thread.run (Thread.Java : 745)
Où est le mal? Comment je le répare?
EDIT1:
Mon repos est comme ceci:
var jsonData = {
id: $("#hiddenId").val(),
permitNumber: $("#txtPermitNumber").val(),
permitToDate: $("#txtPermitToDate").val()
}
document.location = restUrl + "/print?reportParams= " + JSON.stringify(jsonData);
Selon https://Tomcat.Apache.org/Tomcat-8.5-doc/config/systemprops.html , requestTargetAllow est obsolète. Pour moi, les autres solutions présentées ici n'ont pas fonctionné non plus. Selon la documentation Tomcat, j'ai trouvé un moyen de définir la propriété relaxQueryChars à la place:
@Bean
public ConfigurableServletWebServerFactory webServerFactory() {
TomcatServletWebServerFactory factory = new TomcatServletWebServerFactory();
factory.addConnectorCustomizers(new TomcatConnectorCustomizer() {
@Override
public void customize(Connector connector) {
connector.setProperty("relaxedQueryChars", "|{}[]");
}
});
return factory;
}
vous allez démarrer votre application de démarrage Spring comme ceci
$ Java -jar -Dtomcat.util.http.parser.HttpParser.requestTargetAllow=|{}
demo-0.0.1-SNAPSHOT.jar
ou encoder uri comme ça
document.location = restUrl + "/print?reportParams= " + encodeURI(JSON.stringify(jsonData));
Un moyen facile d'ajouter simplement ce code dans votre classe principale
System.setProperty("Tomcat.util.http.parser.HttpParser.requestTargetAllow", "{}");
Pour Spring Boot 1.5.17.RELEASE. Le code ci-dessous a fonctionné pour moi.
@Configuration
public class ServerConfig {
@Bean
public EmbeddedServletContainerFactory webServerFactory() {
TomcatEmbeddedServletContainerFactory factory = new TomcatEmbeddedServletContainerFactory();
factory.addConnectorCustomizers(new TomcatConnectorCustomizer() {
@Override
public void customize(Connector connector) {
connector.setProperty("relaxedQueryChars", "|{}[]");
}
});
return factory;
}
}