Questions tagged «spring»

Spring框架是用于Java平台上的应用程序开发的开源框架。它的核心是对基于组件的体系结构的丰富支持,目前它具有二十多个高度集成的模块。

8
Spring RestTemplate超时
我想为我的Web应用程序使用的rest服务设置连接超时。我正在使用Spring的RestTemplate与我的服务交谈。我进行了一些研究,发现并使用了下面的xml(在我的应用程序xml中),我认为这是为了设置超时。我正在使用Spring 3.0。 我在这里也看到了同样的问题,使用RestTemplate为Spring Web服务设置超时,但是解决方案看起来并不干净,我更愿意通过Spring config设置超时值 <bean id="RestOperations" class="org.springframework.web.client.RestTemplate"> <constructor-arg> <bean class="org.springframework.http.client.CommonsClientHttpRequestFactory"> <property name="readTimeout" value="${restURL.connectionTimeout}" /> </bean> </constructor-arg> </bean> 看来无论我将readTimeout设置为什么,都会得到以下信息: 网络电缆已断开连接: 等待约20秒,并报告以下异常: org.springframework.web.client.ResourceAccessException:I / O错误:主机没有路由:连接;嵌套的异常是java.net.NoRouteToHostException:没有路由到主机:connect 网址不正确,因此REST服务返回404: 等待大约10秒,并报告以下异常: org.springframework.web.client.HttpClientErrorException:找不到404 我的要求需要更短的超时,因此我需要能够更改这些超时。关于我在做什么错的任何想法吗? 非常感谢。

7
春季测试和安全性:如何模拟身份验证?
我试图弄清楚如何对我的控制器的URL进行正确保护的单元测试。以防万一有人更改周围的内容并意外删除安全设置。 我的控制器方法如下所示: @RequestMapping("/api/v1/resource/test") @Secured("ROLE_USER") public @ResonseBody String test() { return "test"; } 我像这样设置一个WebTestEnvironment: import javax.annotation.Resource; import javax.naming.NamingException; import javax.sql.DataSource; import org.junit.Before; import org.junit.runner.RunWith; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Qualifier; import org.springframework.context.support.ClassPathXmlApplicationContext; import org.springframework.security.authentication.UsernamePasswordAuthenticationToken; import org.springframework.security.core.userdetails.UserDetails; import org.springframework.security.core.userdetails.UserDetailsService; import org.springframework.security.web.FilterChainProxy; import org.springframework.test.context.ActiveProfiles; import org.springframework.test.context.ContextConfiguration; import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; import org.springframework.test.context.web.WebAppConfiguration; import …

10
Spring Resttemplate异常处理
下面是代码片段;基本上,当错误代码不是200时,我正在尝试传播异常。 ResponseEntity<Object> response = restTemplate.exchange(url.toString().replace("{version}", version), HttpMethod.POST, entity, Object.class); if(response.getStatusCode().value()!= 200){ logger.debug("Encountered Error while Calling API"); throw new ApplicationException(); } 但是,如果来自服务器的响应为500,则会出现异常 org.springframework.web.client.HttpServerErrorException: 500 Internal Server Error at org.springframework.web.client.DefaultResponseErrorHandler.handleError(DefaultResponseErrorHandler.java:94) ~[spring-web-4.2.3.RELEASE.jar:4.2.3.RELEASE] 我真的需要在尝试中包装其余模板交换方法吗?那么代码的目的是什么?

7
如何在Spring中使用Mockito模拟自动装配的@Value字段?
我正在使用Spring 3.1.4.RELEASE和Mockito 1.9.5。在我的春季班上,我有: @Value("#{myProps['default.url']}") private String defaultUrl; @Value("#{myProps['default.password']}") private String defaultrPassword; // ... 从我目前设置的JUnit测试中可以看到: @RunWith(SpringJUnit4ClassRunner.class) @ContextConfiguration({ "classpath:test-context.xml" }) public class MyTest { 我想为“ defaultUrl”字段模拟一个值。请注意,我不想模拟其他字段的值,我想保留它们的值,只保留“ defaultUrl”字段。另外请注意,setDefaultUrl我的班级中没有明确的“ setter”方法(例如),并且我不想仅为测试目的而创建任何方法。 鉴于此,我该如何模拟该字段的值?

3
ContextLoaderListener与否?
一个标准的Spring Web应用程序(由Roo或“ Spring MVC Project”模板创建)使用ContextLoaderListener和创建一个web.xml DispatcherServlet。为什么他们不仅使用DispatcherServlet并使其加载完整的配置? 我知道应该使用ContextLoaderListener来加载与Web不相关的内容,而DispatcherServlet用于加载与Web相关的内容(控制器等)。这样就产生了两个上下文:父上下文和子上下文。 背景: 我用这种标准方式做了几年了。 <context-param> <param-name>contextConfigLocation</param-name> <param-value>classpath*:META-INF/spring/applicationContext*.xml</param-value> </context-param> <!-- Creates the Spring Container shared by all Servlets and Filters --> <listener> <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class> </listener> <!-- Handles Spring requests --> <servlet> <servlet-name>roo</servlet-name> <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> <init-param> <param-name>contextConfigLocation</param-name> <param-value>WEB-INF/spring/webmvc-config.xml</param-value> </init-param> <load-on-startup>1</load-on-startup> </servlet> 这通常会导致两个上下文及其之间的依存关系出现问题。过去,我总是能够找到解决方案,并且我强烈感觉这使软件结构/体系结构总是更好。但是现在我面对两种情况的问题。 -但是,这让我重新考虑了这两种上下文模式,我在问自己:我为什么要陷入这种麻烦,为什么不将所有spring配置文件都加载其中一个DispatcherServlet并ContextLoaderListener完全删除。(我仍将拥有不同的配置文件,但只有一个上下文。) 有什么理由不删除ContextLoaderListener吗?

5
如何在对Spring MVC Controller的GET请求中接受Date参数?
我有一个GET请求,该请求以YYYY-MM-DD格式发送日期到Spring Controller。控制器代码如下: @RequestMapping(value="/fetch" , method=RequestMethod.GET) public @ResponseBody String fetchResult(@RequestParam("from") Date fromDate) { //Content goes here } 当我正在检查Firebug时,请求已正确发送。我得到错误: HTTP状态400:客户端发送的请求在语法上不正确。 如何使控制器接受这种日期格式?请帮忙。我究竟做错了什么?
122 java  spring  date  spring-mvc 


7
Spring MVC的DelegatingFilterProxy有什么意义?
我在Spring MVC应用程序的中看到了这一点web.xml: <filter> <filter-name>springSecurityFilterChain</filter-name> <filter-class>org.springframework.web.filter.DelegatingFilterProxy</filter-class> </filter> 我试图弄清楚为什么它存在以及是否真正需要它。 我在Spring文档中找到了这种解释,但并不能帮助我理解它: 似乎表明该组件是web.xmlSpring中定义的servlet 和Spring中定义的组件之间的“胶水” applicationContext.xml。 7.1 DelegatingFilterProxy 使用servlet过滤器时,显然需要在中声明它们web.xml,否则servlet容器将忽略它们。在Spring Security中,过滤器类也是在应用程序上下文中定义的Spring Bean,因此能够利用Spring丰富的依赖项注入工具和生命周期接口。Spring DelegatingFilterProxy提供了web.xml与应用程序上下文之间的链接。 使用DelegatingFilterProxy时,您将在web.xml文件中看到以下内容: <filter> <filter-name>myFilter</filter-name> <filter-class>org.springframework.web.filter.DelegatingFilterProxy</filter-class> </filter> <filter-mapping> <filter-name>myFilter</filter-name> <url-pattern>/*</url-pattern> </filter-mapping> 请注意,过滤器实际上是一个DelegatingFilterProxy,而不是将实际实现过滤器逻辑的类。什么DelegatingFilterProxy确实是通过向其从Spring应用程序上下文中的bean代理Filter的方法。这使bean可以从Spring Web应用程序上下文生命周期支持和配置灵活性中受益。Bean必须实现javax.servlet.Filter,并且必须与filter-name元素中的名称相同。阅读Javadoc for DelegatingFilterProxy了解更多信息 因此,如果我从中删除此文件web.xml,将会发生什么?我的servlet无法与Spring容器通信?**

5
是否有可能使用defaultValue的空RequestParam值?
如果我有一个类似于以下内容的请求映射: @RequestMapping(value = "/test", method = RequestMethod.POST) @ResponseBody public void test(@RequestParam(value = "i", defaultValue = "10") int i) { } 然后使用以下命令调用此请求: http://example.com/test?i= 我收到错误消息 无法将'java.lang.String'类型的值转换为'int'类型;嵌套的异常是java.lang.NumberFormatException:对于输入字符串:“” 我可以通过停止javascript客户端发送空参数或接受字符串值并仅在未发现空白的情况下进行解析来解决此问题。 更新:春季的更高版本现在实现了最初想要的行为。 我刚刚在春季4.3.5中对此进行了测试,发现该行为实际上实际上会将null值转换为默认值而不会引发NumberFormatException,因此;我原来的映射现在可以正常工作了。 我不确定此行为更改是在Spring的哪个版本上进行的。
120 java  spring  spring-mvc 

14
如何以正确的方式关闭Spring Boot应用程序?
他们在Spring Boot Document中说:“每个SpringApplication都会向JVM注册一个关闭钩子,以确保退出时优雅地关闭ApplicationContext。” 当我单击ctrl+cshell命令时,可以正常关闭应用程序。如果我在生产计算机上运行该应用程序,则必须使用命令 java -jar ProApplicaton.jar。但是我无法关闭shell终端,否则它将关闭进程。 如果我运行像这样的命令nohup java -jar ProApplicaton.jar &,则无法ctrl+c正常关闭它。 在生产环境中启动和停止Spring Boot Application的正确方法是什么?

27
无法配置数据源:未指定'url'属性,并且无法配置任何嵌入式数据源
我正在使用MongoDB处理Spring Boot Batch示例,并且我已经启动了mongod服务器。 启动应用程序时,出现以下错误。 关于这个问题有什么建议吗? *************************** APPLICATION FAILED TO START *************************** Description: Failed to configure a DataSource: 'url' attribute is not specified and no embedded datasource could be configured. Reason: Failed to determine a suitable driver class Action: Consider the following: If you want an embedded database (H2, HSQL or …

2
如何将@Value定义为可选
我在Spring bean中具有以下内容: @Value("${myValue}") private String value; 该值已正确注入。但是,变量必须是可选的,它作为命令行参数传入(然后使用SimpleCommandLinePropertySource将其添加到Spring上下文中),并且此参数将不会始终存在。 为了提供默认值,我尝试了以下两种方法: @Value("${myValue:}") @Value("${myValue:DEFAULT}") 但是在每种情况下,即使有实际值,冒号后的默认参数也会被注入-这似乎覆盖了Spring应该注入的值。 指定不需要@Value的正确方法是什么? 谢谢

9
从Spring MVC中的控制器操作重定向到外部URL
我注意到以下代码将用户重定向到项目内的URL, @RequestMapping(method = RequestMethod.POST) public String processForm(HttpServletRequest request, LoginForm loginForm, BindingResult result, ModelMap model) { String redirectUrl = "yahoo.com"; return "redirect:" + redirectUrl; } 但是,以下内容已按预期正确重定向,但需要http://或https:// @RequestMapping(method = RequestMethod.POST) public String processForm(HttpServletRequest request, LoginForm loginForm, BindingResult result, ModelMap model) { String redirectUrl = "http://www.yahoo.com"; return "redirect:" + redirectUrl; } 我希望重定向始终重定向到指定的URL,无论它是否具有有效协议,并且都不想重定向到视图。我怎样才能做到这一点? 谢谢,
118 java  spring  jsp  spring-mvc 

9
如何使用Spring管理REST API版本管理?
我一直在搜索如何使用Spring 3.2.x管理REST API版本,但没有找到易于维护的任何东西。我将首先解释我所遇到的问题,然后是一个解决方案...但是我确实想知道我是否在这里重新发明轮子。 我想基于Accept标头来管理版本,例如,如果请求具有Accept标头application/vnd.company.app-1.1+json,我希望spring MVC将其转发到处理该版本的方法。而且由于并非同一版本中的API中的所有方法都发生了变化,所以我不想转到每个控制器并为在版本之间未发生变化的处理程序进行任何更改。我也不想逻辑确定在控制器本身中使用哪个版本(使用服务定位器),因为Spring已经发现了要调用的方法。 因此,采用1.0版至1.8版的API,其中在1.0版中引入了处理程序,并在v1.7版中对其进行了修改,我想通过以下方式进行处理。假设代码在控制器内部,并且有一些代码能够从标头中提取版本。(以下在Spring中无效) @RequestMapping(...) @VersionRange(1.0,1.6) @ResponseBody public Object method1() { // so something return object; } @RequestMapping(...) //same Request mapping annotation @VersionRange(1.7) @ResponseBody public Object method2() { // so something return object; } 在Spring中这是不可能的,因为这两种方法具有相同的RequestMapping注释,并且Spring无法加载。这个想法是VersionRange注释可以定义一个打开或关闭的版本范围。第一种方法从1.0到1.6版本有效,而第二种方法从1.7版开始(包括最新版本1.8)有效。我知道,如果有人决定通过99.99版,这种方法就会失败,但是我可以接受。 现在,由于没有认真修改spring的工作原理就不可能实现上述目的,因此我想到了修改处理程序与请求匹配的方式,特别是编写自己的ProducesRequestCondition,并在其中拥有版本范围。例如 码: @RequestMapping(..., produces = "application/vnd.company.app-[1.0-1.6]+json) @ResponseBody public Object method1() { // so …

18
如何在Spring Boot中设置基本URL以进行休息?
我正在尝试混合mvc和在单个spring boot项目中休息。 我想在一个地方设置所有其余控制器(例如example.com/api)的基本路径(我不想用@RequestMapping('api/products'),而只是用注释每个控制器@RequestMapping('/products')。 Mvc控制器应可通过example.com/whatever访问 可能吗? (我不使用spring数据休息,只是spring mvc)

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.