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

เฟรมเวิร์กสำหรับการสร้างเว็บแอ็พพลิเคชัน Java ตามรูปแบบ Model-View-Controller (MVC) มันส่งเสริมรหัสที่ยืดหยุ่นและแยกได้จากเทคโนโลยีมุมมองพื้นฐาน

12
@Scope (“ ต้นแบบ”) ขอบเขตของ bean ไม่ได้สร้าง bean ใหม่
ฉันต้องการใช้ Bean ต้นแบบที่มีคำอธิบายประกอบในคอนโทรลเลอร์ของฉัน แต่ฤดูใบไม้ผลิกำลังสร้างถั่วซิงเกิลตันแทน นี่คือรหัสสำหรับ: @Component @Scope("prototype") public class LoginAction { private int counter; public LoginAction(){ System.out.println(" counter is:" + counter); } public String getStr() { return " counter is:"+(++counter); } } รหัสคอนโทรลเลอร์: @Controller public class HomeController { @Autowired private LoginAction loginAction; @RequestMapping(value="/view", method=RequestMethod.GET) public ModelAndView display(HttpServletRequest req){ ModelAndView mav …
136 spring  spring-mvc 

4
Field Injection คืออะไรและจะหลีกเลี่ยงได้อย่างไร?
ฉันอ่านในบางโพสต์เกี่ยวกับ Spring MVC และ Portlets ว่าไม่แนะนำให้ใช้การฉีดฟิลด์ ตามที่ฉันเข้าใจแล้วการฉีดสนามคือเมื่อคุณฉีดถั่วด้วย@Autowiredสิ่งนี้: @Component public class MyComponent { @Autowired private Cart cart; } ในระหว่างการวิจัยของฉันฉันยังอ่านเกี่ยวกับการฉีดคอนสตรัคเตอร์ : @Component public class MyComponent { private final Cart cart; @Autowired public MyComponent(Cart cart){ this.cart = cart; } } ข้อดีและข้อเสียของการฉีดทั้งสองประเภทนี้คืออะไร? แก้ไข 1:เนื่องจากคำถามนี้ถูกทำเครื่องหมายว่าซ้ำกับคำถามนี้ฉันจึงตรวจสอบแล้ว สาเหตุที่ไม่มีตัวอย่างโค้ดใด ๆ ทั้งในคำถามหรือในคำตอบมันไม่ชัดเจนสำหรับฉันว่าฉันเดาถูกต้องหรือไม่ว่าฉันใช้การฉีดแบบไหน

4
การแปลงประเภท Spring MVC: PropertyEditor หรือ Converter?
ฉันกำลังมองหาวิธีที่ง่ายและง่ายที่สุดในการผูกและแปลงข้อมูลใน Spring MVC ถ้าเป็นไปได้โดยไม่ต้องทำการกำหนดค่า xml ใด ๆ จนถึงตอนนี้ฉันใช้PropertyEditorsดังนี้: public class CategoryEditor extends PropertyEditorSupport { // Converts a String to a Category (when submitting form) @Override public void setAsText(String text) { Category c = new Category(text); this.setValue(c); } // Converts a Category to a String (when displaying form) @Override public String …

7
การผูกรายการใน @RequestParam
ฉันกำลังส่งพารามิเตอร์จากแบบฟอร์มด้วยวิธีนี้: myparam[0] : 'myValue1' myparam[1] : 'myValue2' myparam[2] : 'myValue3' otherParam : 'otherValue' anotherParam : 'anotherValue' ... ฉันรู้ว่าฉันสามารถรับพารามิเตอร์ทั้งหมดในเมธอดคอนโทรลเลอร์ได้โดยการเพิ่มพารามิเตอร์เช่น public String controllerMethod(@RequestParam Map<String, String> params){ .... } ฉันต้องการผูกพารามิเตอร์ myParam [] (ไม่ใช่พารามิเตอร์อื่น ๆ ) กับรายการหรืออาร์เรย์ (อะไรก็ตามที่เก็บลำดับดัชนี) ดังนั้นฉันจึงลองใช้ไวยากรณ์เช่น: public String controllerMethod(@RequestParam(value="myParam") List<String> myParams){ .... } และ public String controllerMethod(@RequestParam(value="myParam") String[] myParams){ .... } …

16
ใครกำหนดประเภทเนื้อหาการตอบกลับใน Spring MVC (@ResponseBody)
ฉันมีแอปพลิเคชันเว็บ Spring MVC Java ที่ใช้ Annotation ซึ่งทำงานบนเว็บเซิร์ฟเวอร์ของท่าเทียบเรือ (ปัจจุบันอยู่ในปลั๊กอินท่าเทียบเรือ maven) ฉันกำลังพยายามสนับสนุน AJAX ด้วยวิธีการควบคุมเดียวที่ส่งคืนข้อความช่วยเหลือเพียงสตริง ทรัพยากรอยู่ในการเข้ารหัส UTF-8 ดังนั้นสตริงก็เช่นกัน แต่การตอบสนองของฉันจากเซิร์ฟเวอร์มาพร้อมกับ content-encoding: text/plain;charset=ISO-8859-1 แม้ว่าเบราว์เซอร์ของฉันจะส่ง Accept-Charset windows-1250,utf-8;q=0.7,*;q=0.7 ฉันใช้การกำหนดค่าเริ่มต้นของสปริง ฉันพบคำใบ้ในการเพิ่ม bean นี้ในการกำหนดค่า แต่ฉันคิดว่ามันไม่ได้ใช้เพราะมันบอกว่ามันไม่รองรับการเข้ารหัสและใช้ค่าเริ่มต้นแทน <bean class="org.springframework.http.converter.StringHttpMessageConverter"> <property name="supportedMediaTypes" value="text/plain;charset=UTF-8" /> </bean> รหัสคอนโทรลเลอร์ของฉันคือ (โปรดทราบว่าการเปลี่ยนแปลงประเภทการตอบกลับนี้ใช้ไม่ได้สำหรับฉัน): @RequestMapping(value = "ajax/gethelp") public @ResponseBody String handleGetHelp(Locale loc, String code, HttpServletResponse response) { log.debug("Getting help …

8
สปริง mvc @PathVariable
ขอคำอธิบายสั้น ๆ และตัวอย่างการใช้งาน@PathVariableสปริง mvc ได้ไหม โปรดระบุว่าคุณพิมพ์ url อย่างไร? ฉันกำลังดิ้นรนเพื่อให้ได้ url ที่ถูกต้องเพื่อแสดงหน้า jsp ขอบคุณ
125 spring-mvc 

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 

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

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)

2
Spring 4 vs Jersey สำหรับบริการเว็บ REST
เรากำลังวางแผนที่จะสร้างแอปพลิเคชันใหม่ด้วยเวอร์ชันฤดูใบไม้ผลิ 4.0.6 เราใช้ตัวควบคุมที่สามารถส่งคืน "XML" หรือ "JSON" ในโครงการก่อนหน้านี้เราประสบความสำเร็จในการใช้ Jersey กับ Spring for REST โดยใช้ JAX-RS API แต่หลังจากอ่านบทความและคำแนะนำจากผู้อาวุโสแล้วพวกเขากล่าวว่าฤดูใบไม้ผลิให้การสนับสนุน REST ที่ค่อนข้างดี บางประเด็นที่ทำให้ฉันสับสนจริงๆถ้าฉันใช้การสนับสนุน Spring REST โดยไม่ใช้ JAX-RS และ Jersey ได้แก่ : การจัดระเบียบและการไม่เข้าใจผิดใน Spring MVC เป็นอย่างไร จำเป็นไหมสำหรับการมาร์แชลหรือ unmarshaling จำเป็นต้องใช้ jax-rs หากมีการจัดการมาร์แชลและ unmarshaling โดยอัตโนมัติในฤดูใบไม้ผลิจะรู้ได้อย่างไรเกี่ยวกับ xmlRootElements ฉันยังงงอยู่ว่า Spring พิสูจน์การสนับสนุน REST ได้ดีมากแล้วทำไมคนยังไปกับ Jersey for REST? ต้องการทราบรายละเอียดเพิ่มเติมจริงๆ หากฉันพูดอะไรผิดโปรดเพิกเฉย คำอธิบายพร้อมตัวอย่างมีประโยชน์มาก …

20
วิธีหลีกเลี่ยงข้อยกเว้น“ เส้นทางมุมมองแบบวงกลม” ด้วยการทดสอบ Spring MVC
ฉันมีรหัสต่อไปนี้ในตัวควบคุมของฉัน: @Controller @RequestMapping("/preference") public class PreferenceController { @RequestMapping(method = RequestMethod.GET, produces = "text/html") public String preference() { return "preference"; } } ฉันแค่พยายามทดสอบโดยใช้การทดสอบ Spring MVCดังนี้: @ContextConfiguration @WebAppConfiguration @RunWith(SpringJUnit4ClassRunner.class) public class PreferenceControllerTest { @Autowired private WebApplicationContext ctx; private MockMvc mockMvc; @Before public void setup() { mockMvc = webAppContextSetup(ctx).build(); } @Test public void …

4
ชนิด WebMvcConfigurerAdapter เลิกใช้แล้ว
ฉันเพิ่งย้ายไปเป็นเวอร์ชัน spring mvc 5.0.1.RELEASEแต่ทันใดนั้นใน eclipse STS WebMvcConfigurerAdapter ถูกทำเครื่องหมายว่าเลิกใช้แล้ว public class MvcConfig extends WebMvcConfigurerAdapter { @Override public void addResourceHandlers(ResourceHandlerRegistry registry) { registry.addResourceHandler("/resources/**").addResourceLocations("/resources/"); // to serve static .html pages... registry.addResourceHandler("/static/**").addResourceLocations("/resources/static/"); } .... } จะเอาออกได้ยังไง!
116 java  spring  spring-mvc 

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