我想知道以下是否可行.出于测试目的,我希望在应用程序上下文中为不同的测试声明不同的模拟类.这些是使用Jersey REST客户端的验收测试.有没有办法在运行时动态声明bean?Spring是否有一个API允许在加载上下文后更改应用程序上下文?
我正在尝试访问我编写的RESTful Web服务:
http://localhost:8080/dukegen/ws/family/1
Run Code Online (Sandbox Code Playgroud)
但是使用浏览器中的地址栏获取404并且不知道原因.我想恢复JSON.我把杰克逊2放在我的课堂上:
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.3.1</version>
</dependency>
Run Code Online (Sandbox Code Playgroud)
这是服务器输出:
Jan 14, 2014 8:29:55 PM org.springframework.web.servlet.handler.AbstractUrlHandlerMapping registerHandler
INFO: Mapped URL path [/ws/family/{familyId}] onto handler 'familyResource'
Jan 14, 2014 8:29:55 PM org.springframework.web.servlet.handler.AbstractUrlHandlerMapping registerHandler
INFO: Mapped URL path [/ws/family/{familyId}.*] onto handler 'familyResource'
Jan 14, 2014 8:29:55 PM org.springframework.web.servlet.handler.AbstractUrlHandlerMapping registerHandler
INFO: Mapped URL path [/ws/family/{familyId}/] onto handler 'familyResource'
Jan 14, 2014 8:29:55 PM org.springframework.web.servlet.FrameworkServlet initServletBean
INFO: FrameworkServlet 'dispatcher': initialization completed in 360 ms
Jan 14, 2014 8:29:55 PM org.springframework.web.servlet.DispatcherServlet noHandlerFound
WARNING: No mapping …Run Code Online (Sandbox Code Playgroud) 我今天早上刚刚了解了ThreadLocal.我读到它应该总是最终的和静态的:
private static final ThreadLocal<Session> threadLocal = new ThreadLocal<Session>();
Run Code Online (Sandbox Code Playgroud)
(Session是一个Hibernate会话)
我的困惑是:因为它是静态的,所以JVM中的任何线程都可以使用它.然而,它会保存访问它的每个线程的本地信息吗?我试图绕过这个,所以如果不清楚我会道歉.应用程序中的每个线程都可以访问相同的ThreadLocal对象,但ThreadLocal对象将存储每个线程的本地对象?
我使用Jersey创建了一些使用SPENGO进行身份验证的REST服务.我正在使用Jersey客户端创建验收测试.我想知道如何使用Jersey客户端来设置SPENGO标头.我查看过滤器,但不太了解它.如果有人可以提供代码示例,那将非常感激.
我有REST服务,由javascript消费.此服务返回内容类型"application/json".但是,对于IE,内容类型必须是"text/html".因此,当IE被检测为客户端时,我编写了一个过滤器和包装器来更改内容类型.我的逻辑似乎对内容类型没有影响.我究竟做错了什么?
过滤器:
public class IE8Filter implements Filter {
private Logger logger = LoggerHelper.getLogger();
@Override
public void destroy() {}
@Override
public void doFilter(ServletRequest req, ServletResponse res,
FilterChain chain) throws IOException, ServletException {
HttpServletRequest request = (HttpServletRequest) req;
HttpServletResponse response = (HttpServletResponse) res;
String userAgent = request.getHeader("User-Agent");
logger.debugf("User Agent = '%s'", userAgent);
IE8FilterResponseWrapper wrapper = new IE8FilterResponseWrapper(response);
chain.doFilter(req, wrapper);
if (userAgent.contains("MSIE 8") || userAgent.contains("MSIE 7")) {
wrapper.setContentType("text/html");
logger.debugf("Content Type = '%s'", wrapper.getContentType());
}
}
@Override
public void init(FilterConfig arg0) throws ServletException {} …Run Code Online (Sandbox Code Playgroud) 我有一些影响生产服务器的Jenkins工作.如果你有"你确定要这么做吗?"会很高兴.用户运行其中一个作业时的对话框.我还没有找到一个插件.有没有人试过这样做?
在我的项目中,我进行了验收测试,需要很长时间才能运行.当我向代码添加新功能并编写新测试时,我想暂时跳过一些现有的测试用例.我使用SpringJUnit4ClassRunner使用Spring 3和junit 4.我的想法是为测试类创建一个注释(@Skip或其他东西).我猜我必须修改运行器以查找此注释,并从系统属性确定是否应在测试时包含测试类.我的问题是,这很容易吗?或者我错过了某个可以帮助我的现有功能?
谢谢.埃里克
我正在尝试使用$ .getJSON(jquery 2)来调用Web服务:
http://localhost:8080/ws/family/1
Run Code Online (Sandbox Code Playgroud)
当我在浏览器中输入时,此Web服务可以正常工作.我正在使用Jetty Maven插件,因此没有上下文根.我的页面位于:
http://localhost:8080/view/index.html
Run Code Online (Sandbox Code Playgroud)
这是我的javascript(已编辑):
var getFamily = function() {
return $.getJSON({
url: "/ws/family/1"
});
};
Run Code Online (Sandbox Code Playgroud)
我收到以下错误:
GET http://localhost:8080/view/[object%20Object] 404 (Not Found)
Run Code Online (Sandbox Code Playgroud)
我的页面中没有基本标记.
spring ×3
java ×2
javascript ×1
jenkins ×1
jersey ×1
jquery ×1
junit ×1
rest ×1
spnego ×1
thread-local ×1