springMVC配置用法的文章很多,但具體描述清楚的不多,這里主要介紹下常用的配置項(xiàng)的用法,以及它的解析類,springMVC處理內(nèi)容有兩種方式,一種是converter,另一種是ViewResolver,兩種都能處理json,xml以及form內(nèi)容格式。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
|
<? xml version = "1.0" encoding = "UTF-8" standalone = "no" ?> < beans xmlns = "http://www.springframework.org/schema/beans" xmlns:context = "http://www.springframework.org/schema/context" xmlns:aop = "http://www.springframework.org/schema/aop" xmlns:mvc = "http://www.springframework.org/schema/mvc" xmlns:p = "http://www.springframework.org/schema/p" xmlns:xsi = "http://www.w3.org/2001/XMLSchema-instance" xmlns:util = "http://www.springframework.org/schema/util" xmlns:c = "http://www.springframework.org/schema/c" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.2.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.2.xsd http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-3.2.xsd http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util.xsd http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-3.2.xsd"> <!-- 如果controller里要用到配置,才需要加載配置,因?yàn)橐话氵@個(gè)配置由DispatchServlet來(lái)加載,和spring監(jiān)聽(tīng)類不在一個(gè)上下文里,想要知道原因請(qǐng)看 http://blog.csdn.net/strivezxq/article/details/43795081 這篇文章詳細(xì)解析了spring初始化過(guò)程 --> < context:property-placeholder location = "classpath:app.properties" /> <!--Scans the classpath for annotated components @Component, @Repository, @Service, and @Controller 通過(guò)use-default-filters="false",可以設(shè)置只掃描哪些注釋,一般springMVC配置只加載下面兩種注釋 --> < context:component-scan base-package = "your.base.package" use-default-filters = "false" > < context:include-filter type = "annotation" expression = "org.springframework.stereotype.Controller" /> < context:include-filter type = "annotation" expression = "org.springframework.web.bind.annotation.ControllerAdvice" /> </ context:component-scan > <!-- <context:component-scan annotation-config = "true">已經(jīng)包含了context:annotation-configr的功能,所以這個(gè)配置基本沒(méi)必要配置,激活在bean類中被檢測(cè)到的各種注釋:Spring's @Required and @Autowired, as well as JSR 250's @PostConstruct, @PreDestroy and @Resource (if available), JAX-WS's @WebServiceRef (if available), EJB3's @EJB (if available), and JPA's @PersistenceContext and @PersistenceUnit (if available) --> < context:annotation-config /> <!--會(huì)在Spring MVC上下文中定義一個(gè) org.springframework.web.servlet.resource.DefaultServletHttpRequestHandler, 它會(huì)像一個(gè)檢查員,對(duì)進(jìn)入DispatcherServlet的URL進(jìn)行篩查,如果發(fā)現(xiàn)是靜態(tài)資源的請(qǐng)求,就將該請(qǐng)求轉(zhuǎn)由Web應(yīng)用服務(wù)器默認(rèn)的 Servlet處理,如果不是靜態(tài)資源的請(qǐng)求,才由DispatcherServlet繼續(xù)處理。 一般Web應(yīng)用服務(wù)器默認(rèn)的Servlet名稱是"default",因此DefaultServletHttpRequestHandler可以 找到它。如果你所有的Web應(yīng)用服務(wù)器的默認(rèn)Servlet名稱不是"default",則需要通過(guò)default-servlet-name屬性顯示指 定: <mvc:default-servlet-handler default-servlet-name="所使用的Web服務(wù)器默認(rèn)使用的Servlet名稱" /> Tomcat, Jetty, JBoss, and GlassFish默認(rèn)名稱為default, eg: web.xml中 1. <servlet-mapping> 2. <servlet-name>default</servlet-name> 3. <url-pattern>*.jpg</url-pattern> 4. </servlet-mapping> 5. <servlet-mapping> 6. <servlet-name>default</servlet-name> 7. <url-pattern>*.js</url-pattern> 8. </servlet-mapping> 9. <servlet-mapping> 10. <servlet-name>default</servlet-name> 11. <url-pattern>*.css</url-pattern> 12. </servlet-mapping> 如果不配置springdefault-servlet-name 默認(rèn)會(huì)設(shè)置,已經(jīng)支持常用的web服務(wù)器 --> < mvc:default-servlet-handler /> <!-- 允許靜態(tài)資源放在任何地方 ,處理類org.springframework.web.servlet.resource.ResourceHttpRequestHandler <bean id="resourceHttpRequestHandler" class="org.springframework.web.servlet.resource.ResourceHttpRequestHandler"> <property name="locations" value="classpath:/META-INF/resources/"></property> </bean> <bean class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping"> <property name="mappings"> <props> <prop key="/resources/**">resourceHttpRequestHandler</prop> </props> </property> </bean> 下面標(biāo)簽實(shí)現(xiàn) --> < mvc:resources mapping = "/resources/**" location = "/resources/" ></ mvc:resources > <!-- register "global" interceptor beans to apply to all registered HandlerMappings . Each inteceptor must implement the org.springframework.web.servlet.HandlerInterceptor or org.springframework.web.context.request.WebRequestInterceptor interface --> < mvc:interceptors > < mvc:interceptor > < mvc:mapping path = "/**" /> < mvc:exclude-mapping path = "/css/**" /> < mvc:exclude-mapping path = "/js/**" /> < mvc:exclude-mapping path = "/images/**" /> < bean class = "com.fpx.common.auth.mgt.framework.interceptor.ContextInterceptor" /> </ mvc:interceptor > </ mvc:interceptors > <!-- Turns on support for mapping requests to Spring MVC @Controller methods Also registers default Formatters and Validators for use across all @Controllers 配置解析類:org.springframework.web.servlet.config.AnnotationDrivenBeanDefinitionParser 配置content-negotiation-anager可以在url里設(shè)置內(nèi)容類型參數(shù),可以設(shè)置默認(rèn)內(nèi)容類型 <bean id="contentNegotiationManagerFactoryBean" class="org.springframework.web.accept.ContentNegotiationManagerFactoryBean" p:favorPathExtension="false" p:favorParameter="true" p:parameterName="format" p:ignoreAcceptHeader="true" p:defaultContentType="application/json"> <property name="mediaTypes"> <props> <prop key="json">application/json</prop> <prop key="xml">application/xml</prop> </props> </property> </bean> --> < mvc:annotation-driven content-negotiation-anager = "contentNegotiationManagerFactoryBean" > < mvc:message-converters > < ref bean = "stringHttpMessageConverter" /> < ref bean = "jsonHttpMessageConverter" /> < ref bean = "marshallingHttpMessageConverter" /> </ mvc:message-converters > </ mvc:annotation-driven > <!-- 內(nèi)容管理工廠 --> < bean class = "org.springframework.web.accept.ContentNegotiationManagerFactoryBean" p:favorPathExtension = "false" p:favorParameter = "true" p:parameterName = "format" p:ignoreAcceptHeader = "true" p:defaultContentType = "application/json" > < property name = "mediaTypes" > < props > < prop key = "json" >application/json</ prop > < prop key = "xml" >application/xml</ prop > </ props > </ property > </ bean > <!-- 內(nèi)容解析器 ,可以p:parameterName="format"來(lái)配置返回參數(shù)類型 ,通過(guò)p:defaultContentType配置默認(rèn)請(qǐng)求內(nèi)容類型, c:qualityValue="0.5" 可以設(shè)置內(nèi)容類型的優(yōu)先級(jí), 如果使用了mvc:annotation-driven 和注解方式(@RequestBody), 下面配置是不生效的--> < bean class = "org.springframework.web.servlet.view.ContentNegotiatingViewResolver" > < property name = "contentNegotiationManager" ref = "contentNegotiationManagerFactoryBean" > </ property > < property name = "defaultViews" > < list > < bean class = "org.springframework.web.servlet.view.json.MappingJackson2JsonView" > < property name = "modelKey" value = "resultVo" /> < property name = "extractValueFromSingleKeyModel" value = "true" /> </ bean > < bean class = "org.springframework.web.servlet.view.xml.MarshallingView" > < constructor-arg ref = "jaxb2Marshaller" /> < property name = "contentType" value = "application/xml" /> </ bean > </ list > </ property > <!-- <property name="ignoreAcceptHeader" value="true" /> --> </ bean > <!-- XML view using a JAXB marshaller --> < bean id = "jaxb2Marshaller" class = "org.springframework.oxm.jaxb.Jaxb2Marshaller" > < property name = "marshallerProperties" > < map > < entry key = "jaxb.formatted.output" > < value type = "boolean" >true</ value > </ entry > < entry key = "jaxb.encoding" value = "UTF-8" /> </ map > </ property > < property name = "packagesToScan" > < list > < value >com.api.domain</ value > < value >com.api.web.controller.vo</ value > </ list > </ property > </ bean > < bean id = "jstlViewResolver" class = "org.springframework.web.servlet.view.InternalResourceViewResolver" > < property name = "order" value = "2" /> < property name = "viewClass" value = "org.springframework.web.servlet.view.JstlView" /> < property name = "prefix" value = "/views/" /> < property name = "suffix" value = "" /> < property name = "requestContextAttribute" value = "rc" /> </ bean > <!-- c:qualityValue="0.5" 可以設(shè)置內(nèi)容類型的優(yōu)先級(jí),默認(rèn)是1.0,越大優(yōu)先級(jí)越高 --> < bean id = "stringHttpMessageConverter" class = "org.springframework.http.converter.StringHttpMessageConverter" > < property name = "supportedMediaTypes" > < list > < value >text/plain;charset=UTF-8</ value > < value >text/html;charset=UTF-8</ value > </ list > </ property > </ bean > < bean id = "jsonHttpMessageConverter" class = "org.springframework.http.converter.json.MappingJackson2HttpMessageConverter" /> < bean id = "marshallingHttpMessageConverter" class = "org.springframework.http.converter.xml.MarshallingHttpMessageConverter" > < constructor-arg ref = "jaxb2Marshaller" /> <!-- <property name="supportedMediaTypes" value="application/xml"></property> --> < property name = "supportedMediaTypes" > < util:list > < bean class = "org.springframework.http.MediaType" c:type = "application" c:subtype = "xml" c:qualityValue = "0.5" /> </ util:list > </ property > </ bean > |
SpringMVC返回json配置步驟如下:
1、添加jackson.jar包
2、在applicationContext.xml配制文件中添加如下代碼
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
|
<!--解析返回JSON --> <!-- <bean class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter"> --> < bean class = "org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter" > < property name = "messageConverters" > < list > < ref bean = "mappingJacksonHttpMessageConverter" /> </ list > </ property > </ bean > < bean id = "mappingJacksonHttpMessageConverter" class = "org.springframework.http.converter.json.MappingJackson2HttpMessageConverter" > < property name = "supportedMediaTypes" > < list > < value >text/html;charset=UTF-8</ value > </ list > </ property > </ bean > |
3、在controller中添加如下代碼
1
2
3
4
5
6
|
@RequestMapping (value= "/chinese/listTree" , method = RequestMethod.POST) @ResponseBody public List getlistChinese(Model model){ List<User> list = (List<ChineseCategory>) commonMgr.find( "from User" ); return list; } |
返回值可以為list也可以為Map類型
總結(jié)
以上就是本文關(guān)于Spring常用配置及解析類說(shuō)明的全部?jī)?nèi)容,希望對(duì)大家有所幫助。如有不足之處,歡迎留言指出。感謝朋友們對(duì)本站的支持!
原文鏈接:http://blog.csdn.net/strivezxq/article/details/45457067