คำถามติดแท็ก spring

Spring Framework เป็นเฟรมเวิร์กโอเพนซอร์ซสำหรับการพัฒนาแอพพลิเคชั่นบนแพลตฟอร์ม Java ที่แกนกลางของมันคือการสนับสนุนที่หลากหลายสำหรับสถาปัตยกรรมที่ใช้ส่วนประกอบและในปัจจุบันมีโมดูลรวมมากกว่ายี่สิบโมดูล

8
Spring RestTemplate หมดเวลา
ฉันต้องการตั้งค่าระยะหมดเวลาการเชื่อมต่อสำหรับบริการพักที่แอปพลิเคชันเว็บของฉันใช้ ฉันใช้ RestTemplate ของ Spring เพื่อพูดคุยกับบริการของฉัน ฉันได้ทำการค้นคว้าและพบและใช้ xml ด้านล่าง (ใน xml แอปพลิเคชันของฉัน) ซึ่งฉันเชื่อว่ามีไว้เพื่อตั้งค่าการหมดเวลา ฉันใช้ Spring 3.0 ฉันยังพบปัญหาเดียวกันที่นี่การกำหนดค่าการหมดเวลาสำหรับ Spring webservices ด้วย RestTemplateแต่โซลูชันดูเหมือนจะไม่สะอาดฉันต้องการตั้งค่าการหมดเวลาผ่าน 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.ResourceAccessExcep ข้อผิดพลาด I / O: ไม่มีเส้นทางไปยังโฮสต์: เชื่อมต่อ; …

7
ฉันจะล้อเลียนช่อง @Value แบบอัตโนมัติใน Spring ด้วย Mockito ได้อย่างไร
ฉันใช้ Spring 3.1.4 RELEASE และ Mockito 1.9.5 ในชั้นเรียน Spring ของฉันฉันมี: @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" โปรดทราบว่าฉันไม่มีเมธอด "setter" ที่ชัดเจน (เช่นsetDefaultUrl) ในชั้นเรียนของฉันและฉันไม่ต้องการสร้างขึ้นเพื่อจุดประสงค์ในการทดสอบเท่านั้น ด้วยสิ่งนี้ฉันจะเยาะเย้ยค่าของฟิลด์นั้นได้อย่างไร

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; …

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] ฉันจำเป็นต้องสรุปวิธีการแลกเปลี่ยนเทมเพลตที่เหลือจริงๆหรือไม่? แล้วจุดประสงค์ของรหัสคืออะไร?

3
ContextLoaderListener หรือไม่?
แอพลิเคชันเว็บฤดูใบไม้ผลิมาตรฐาน (สร้างโดยกินตานาโรหรือ "ฤดูใบไม้ผลิ MVC โครงการ" แม่แบบ) สร้าง web.xml ด้วยและContextLoaderListener ทำไมพวกเขาไม่เพียงใช้และทำให้มันโหลดการกำหนดค่าที่สมบูรณ์?DispatcherServletDispatcherServlet ฉันเข้าใจว่าควรใช้ ContextLoaderListener เพื่อโหลดสิ่งที่ไม่เกี่ยวข้องกับเว็บและใช้ DispatcherServlet เพื่อโหลดสิ่งที่เกี่ยวข้องกับเว็บ (Controllers, ... ) และส่งผลให้เกิดสองบริบท: บริบทผู้ปกครองและบริบทย่อย พื้นหลัง: ฉันทำแบบนี้มาหลายปีแล้ว <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> …

5
จะยอมรับพารามิเตอร์วันที่ในคำขอ GET ไปยัง Spring MVC Controller ได้อย่างไร
ฉันมีคำขอ 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 Status 400: คำร้องขอที่ไคลเอ็นต์ส่งไปนั้นไม่ถูกต้องตามหลักไวยากรณ์ ฉันจะทำให้คอนโทรลเลอร์ยอมรับรูปแบบของวันที่นี้ได้อย่างไร กรุณาช่วย. ผมทำอะไรผิดหรือเปล่า?
122 java  spring  date  spring-mvc 

2
spring.jpa.open-in-view = คุณสมบัติที่แท้จริงใน Spring Boot คืออะไร?
ฉันเห็นspring.jpa.open-in-view=trueคุณสมบัติในเอกสาร Spring Boot สำหรับการกำหนดค่า JPA เป็นtrueค่าเริ่มต้นสำหรับคุณสมบัตินี้หากไม่ได้ระบุไว้เลยหรือไม่; สิ่งนี้ทำอะไรได้บ้าง? ฉันไม่พบคำอธิบายที่ดีสำหรับมัน มันทำให้คุณใช้SessionFactoryแทนEntityManagerFactory? ถ้าใช่ฉันจะแจ้งให้ฉันใช้EntityManagerFactoryแทนได้อย่างไร ขอบคุณ!

14
วิธีปิด Spring Boot Application ด้วยวิธีที่ถูกต้อง?
ในเอกสาร Spring Boot พวกเขากล่าวว่า 'SpringApplication แต่ละตัวจะลงทะเบียน hook การปิดระบบกับ JVM เพื่อให้แน่ใจว่า ApplicationContext ปิดอย่างเรียบร้อยเมื่อออกจากระบบ' เมื่อฉันคลิกctrl+cที่คำสั่งเชลล์แอปพลิเคชันสามารถปิดได้อย่างสวยงาม java -jar ProApplicaton.jarถ้าผมเรียกใช้โปรแกรมประยุกต์ในเครื่องการผลิตที่ผมต้องใช้คำสั่ง แต่ฉันปิดเทอร์มินัลเชลล์ไม่ได้มิฉะนั้นจะปิดกระบวนการ ถ้าฉันเรียกใช้คำสั่งเช่นnohup java -jar ProApplicaton.jar &ฉันไม่สามารถใช้ctrl+cเพื่อปิดได้อย่างสง่างาม วิธีที่ถูกต้องในการเริ่มและหยุด Spring Boot Application ในสภาพแวดล้อมการผลิตคืออะไร?

7
DelegatingFilterProxy ของ Spring MVC คืออะไร
ฉันเห็นสิ่งนี้ในแอป Spring MVC ของฉันweb.xml: <filter> <filter-name>springSecurityFilterChain</filter-name> <filter-class>org.springframework.web.filter.DelegatingFilterProxy</filter-class> </filter> ฉันพยายามหาสาเหตุว่าทำไมถึงอยู่ที่นั่นและจำเป็นจริงหรือไม่ ฉันพบคำอธิบายนี้ในเอกสาร Springแต่ไม่ได้ช่วยให้ฉันเข้าใจได้: มันดูเหมือนว่าจะชี้ให้เห็นว่าส่วนนี้เป็น "กาว" ระหว่าง Servlets ที่กำหนดไว้ในและส่วนประกอบที่กำหนดไว้ในฤดูใบไม้ผลิweb.xmlapplicationContext.xml 7.1 DelegatingFilterProxy เมื่อใช้ตัวกรอง servlet คุณต้องประกาศในตัวกรองของคุณอย่างชัดเจนweb.xmlมิฉะนั้นจะถูกละเว้นโดยคอนเทนเนอร์ servlet ใน Spring Security คลาสของตัวกรองยังเป็น Spring beans ที่กำหนดไว้ในบริบทของแอปพลิเคชันดังนั้นจึงสามารถใช้ประโยชน์จากสิ่งอำนวยความสะดวกในการฉีดแบบพึ่งพาและอินเทอร์เฟซวงจรชีวิตของ Spring Spring's 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> สังเกตว่าจริงๆแล้วตัวกรองคือ a DelegatingFilterProxyไม่ใช่คลาสที่จะใช้ตรรกะของตัวกรองจริงๆ สิ่งที่DelegatingFilterProxyจะเป็นวิธีการมอบหมายของตัวกรองผ่านถั่วที่ได้จากบริบทของแอพลิเคชันฤดูใบไม้ผลิ สิ่งนี้ทำให้ bean ได้รับประโยชน์จากการสนับสนุนวงจรชีวิตบริบทของเว็บแอ็พพลิเคชัน …

5
เป็นไปได้ไหมที่จะมีค่า RequestParam ว่างโดยใช้ defaultValue
หากฉันมีการแมปคำขอคล้ายกับสิ่งต่อไปนี้: @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 และพบว่าในความเป็นจริงแล้วพฤติกรรมจะเปลี่ยนค่าว่างเป็นค่าเริ่มต้นโดยไม่ต้องเพิ่ม a NumberFormatExceptionดังนั้น การทำแผนที่เดิมของฉันใช้งานได้ดี ฉันไม่แน่ใจว่าสปริงนี้มีการเปลี่ยนแปลงพฤติกรรมรุ่นใด
120 java  spring  spring-mvc 

9
จะจัดการการกำหนดเวอร์ชัน REST API ด้วยสปริงได้อย่างไร
ฉันค้นหาวิธีจัดการเวอร์ชัน REST API โดยใช้ Spring 3.2.x แต่ฉันไม่พบสิ่งที่ดูแลรักษาง่าย ฉันจะอธิบายปัญหาที่ฉันมีก่อนจากนั้นวิธีแก้ปัญหา ... แต่ฉันสงสัยว่าฉันกำลังประดิษฐ์วงล้อขึ้นมาใหม่ที่นี่ ฉันต้องการจัดการเวอร์ชันโดยใช้ส่วนหัว Accept และตัวอย่างเช่นหากคำขอมีส่วนหัว Accept application/vnd.company.app-1.1+jsonฉันต้องการให้ MVC ส่งต่อไปยังวิธีการที่จัดการเวอร์ชันนี้ และเนื่องจากไม่ใช่วิธีการทั้งหมดใน API ที่เปลี่ยนแปลงในรุ่นเดียวกันฉันจึงไม่ต้องการไปที่คอนโทรลเลอร์แต่ละตัวของฉันและเปลี่ยนแปลงอะไรสำหรับตัวจัดการที่ไม่มีการเปลี่ยนแปลงระหว่างเวอร์ชัน ฉันไม่ต้องการให้ตรรกะในการคิดว่าจะใช้เวอร์ชันใดในคอนโทรลเลอร์ด้วยตัวเอง (โดยใช้ตัวระบุตำแหน่งบริการ) เนื่องจาก Spring กำลังค้นพบวิธีการเรียกใช้แล้ว ดังนั้นจึงใช้ API ที่มีเวอร์ชัน 1.0 ถึง 1.8 ซึ่งมีการแนะนำตัวจัดการในเวอร์ชัน 1.0 และแก้ไขใน v1.7 ฉันต้องการจัดการสิ่งนี้ด้วยวิธีต่อไปนี้ ลองนึกภาพว่าโค้ดนั้นอยู่ในคอนโทรลเลอร์และมีโค้ดบางตัวที่สามารถแยกเวอร์ชันออกจากส่วนหัวได้ (ต่อไปนี้ไม่ถูกต้องในฤดูใบไม้ผลิ) @RequestMapping(...) @VersionRange(1.0,1.6) @ResponseBody public Object method1() { // so something return object; …

2
วิธีกำหนด @Value เป็นทางเลือก
ฉันมีสิ่งต่อไปนี้ใน Spring bean: @Value("${myValue}") private String value; ค่าถูกฉีดอย่างถูกต้อง อย่างไรก็ตามตัวแปรจำเป็นต้องเป็นทางเลือกซึ่งจะถูกส่งผ่านเป็นพารามิเตอร์บรรทัดคำสั่ง (ซึ่งจะถูกเพิ่มไปยังบริบท Spring โดยใช้SimpleCommandLinePropertySource ) และอาร์กิวเมนต์นี้จะไม่มีอยู่เสมอไป ฉันได้ลองทั้งสองอย่างต่อไปนี้เพื่อระบุค่าเริ่มต้น: @Value("${myValue:}") @Value("${myValue:DEFAULT}") แต่ในแต่ละกรณีอาร์กิวเมนต์เริ่มต้นหลังจากที่ลำไส้ใหญ่ถูกฉีดเข้าไปแม้ว่าจะมีค่าจริงก็ตาม - สิ่งนี้จะแทนที่สิ่งที่สปริงควรฉีด อะไรคือวิธีที่ถูกต้องในการระบุว่าไม่จำเป็นต้องมี@Value ขอบคุณ

12
จะจัดการข้อยกเว้นในตัวกรองในฤดูใบไม้ผลิได้อย่างไร?
ฉันต้องการใช้วิธีทั่วไปในการจัดการรหัสข้อผิดพลาด 5xx สมมติว่าเฉพาะกรณีเมื่อ db หยุดทำงานในแอปพลิเคชัน Spring ทั้งหมดของฉัน ฉันต้องการข้อผิดพลาด json แทนการติดตามสแต็ก สำหรับคอนโทรลเลอร์ฉันมี@ControllerAdviceคลาสสำหรับข้อยกเว้นที่แตกต่างกันและนี่ก็เป็นการจับกรณีที่ db หยุดอยู่ตรงกลางของคำขอ แต่นี่ไม่ใช่ทั้งหมด. ฉันยังมีส่วนCorsFilterขยายที่กำหนดเองOncePerRequestFilterและที่นั่นเมื่อฉันโทรหาdoFilterฉันได้รับCannotGetJdbcConnectionExceptionและจะไม่ได้รับการจัดการโดยไฟล์@ControllerAdvice. ฉันอ่านหลายสิ่งทางออนไลน์ซึ่งทำให้ฉันสับสนมากขึ้นเท่านั้น ดังนั้นฉันจึงมีคำถามมากมาย: ฉันต้องติดตั้งตัวกรองแบบกำหนดเองหรือไม่? ฉันพบExceptionTranslationFilterแต่สิ่งนี้จัดการได้AuthenticationExceptionหรือAccessDeniedException. ฉันคิดว่าจะใช้ของฉันเองHandlerExceptionResolverแต่ทำให้ฉันสงสัยฉันไม่มีข้อยกเว้นที่กำหนดเองในการจัดการต้องมีวิธีที่ชัดเจนกว่านี้ ฉันยังพยายามเพิ่ม try / catch และเรียกการใช้งานHandlerExceptionResolver(ควรจะดีพอข้อยกเว้นของฉันไม่มีอะไรพิเศษ) แต่สิ่งนี้ไม่ส่งคืนอะไรเลยในการตอบกลับฉันได้รับสถานะ 200 และเนื้อความว่างเปล่า มีวิธีใดที่ดีในการจัดการกับปัญหานี้หรือไม่? ขอบคุณ

9
เปลี่ยนเส้นทางไปยัง URL ภายนอกจากการดำเนินการของคอนโทรลเลอร์ใน Spring MVC
ฉันสังเกตเห็นว่ารหัสต่อไปนี้กำลังเปลี่ยนเส้นทางผู้ใช้ไปยัง 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 = …
118 java  spring  jsp  spring-mvc 

18
วิธีตั้งค่า url ฐานสำหรับการพักในสปริงบูต?
ฉันกำลังพยายามผสม mvc และพักในโครงการสปริงบูตเดียว ฉันต้องการกำหนดเส้นทางฐานสำหรับตัวควบคุมส่วนที่เหลือทั้งหมด (เช่น example.com/api) ในที่เดียว (ฉันไม่ต้องการใส่คำอธิบายประกอบแต่ละตัวควบคุมด้วย@RequestMapping('api/products')เพียงแค่@RequestMapping('/products'). ตัวควบคุม Mvc ควรเข้าถึงได้โดย example.com/whatever เป็นไปได้ไหม? (ฉันไม่ใช้สปริงข้อมูลเหลือแค่สปริง mvc)

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.