【发布时间】:2013-11-07 11:07:27
【问题描述】:
我喜欢测试我的休息服务项目,但它似乎没有以适当的方式工作,无论如何我可以自己解决这个问题,但我必须确保获得调试信息。 (我只看到状态码:400 Bad Request,说明客户端发送的请求语法错误。)
好的,我在 pom 文件中使用了带有以下配置的 tomcat7-maven-plugin
<plugin>
<groupId>org.apache.tomcat.maven</groupId>
<artifactId>tomcat7-maven-plugin</artifactId>
<version>2.0</version>
<configuration>
<port>9090</port>
<httpsPort>9443</httpsPort>
<!-- <path>/${project.build.finalName}</path> -->
<contextFile>${basedir}/src/main/resources/context.xml</contextFile>
<keystoreFile>${basedir}/src/main/resources/server.jks</keystoreFile>
<keystorePass>123456</keystorePass>
</configuration>
</plugin>
log4j 文件保留在 /src/main/resources/ 文件夹中,并将照常复制到 classes 文件夹中。
看起来像
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE log4j:configuration SYSTEM "log4j.dtd">
<log4j:configuration>
<appender name="console" class="org.apache.log4j.ConsoleAppender">
<layout class="org.apache.log4j.PatternLayout">
<param name="ConversionPattern" value="%-5p %d +++ P R O D +++ [%t] %c: %m%n" />
</layout>
</appender>
<logger name="org">
<level value="error" />
</logger>
<logger name="org.springframework.web">
<level value="DEBUG" />
</logger>
<root>
<level value="DEBUG" />
<appender-ref ref="console" />
</root>
</log4j:configuration>
我在插件所需的同一文件夹中也有一个 content.xml
<?xml version='1.0' encoding='utf-8'?>
<Context cookies="true" >
<!-- disable session persistence: -->
<Manager pathname="" />
</Context>
我用 mvn clean tomcat7:run-war 启动应用程序,但是没有打印出请求不正确的原因,根本没有打印错误。
我也尝试了不同的方法,但没有成功:
-
我将 ExeptionHandler 添加到带有和不带有 ResponseStatus 注释的类中
@ExceptionHandler @ResponseStatus(HttpStatus.BAD_REQUEST) public void handle(HttpMessageNotReadableException e) { logger.warn("Returning HTTP 400 Bad Request", e); } 我将 log4j 依赖项添加到插件配置中,它们也在项目依赖项中,仅提一下。
- 我将 log4j.xml 移到了 WEB-INF 文件夹中
- 我从 mvn -X clean tomcat7:run-war 开始
-
我将资源配置添加到 pom.xml 文件中的插件配置
<resources> <resource> <includes> <include>**/log4j.xml</include> </includes> </resource> </resources> - 我还检查了 commons-logging 和 slf4j 的依赖关系并将它们排除在外
所有这些操作都不会激活我的休息服务后呼叫的日志记录。 啊,我使用了 firefox restclient 和 curl,我还转义了 curl 中的引号,因为我在另一个线程中找到了。
我也可以,如果我启用了不同的记录器,只是为了获取那里发生的信息。
【问题讨论】:
-
错误 400 不一定是您的应用程序中的错误。它也可能是客户端调用中的错误。例如调用错误或未发送完整的请求标头。您是否按照@CodeChimp 的建议捕获了请求标头?此外,我们在某些防病毒和 Java 网络流量方面遇到了严重问题。
标签: java spring rest maven tomcat