想要从前端表单中接收一个作者,然后根据作者名字查询该作者的全部作品。
------------<br/>
<form method="get" action="queryBooks">
作者:<input type="text" name="bookAuthor">
<input type="submit" value="查询">
</form>
一直查询的结果都是空。可是调试发现controller已经接收到了数据。控制台打印接收到的作者名字,输出的是??????。
是编码问题。可以通过添加一个编码过滤器来解决。
这里我采用的是配置类的形式。
public class WebAppInitializer extends AbstractAnnotationConfigDispatcherServletInitializer {
@Override
protected Class<?>[] getRootConfigClasses() {
return new Class[]{RootConfig.class};
}
@Override
protected Class<?>[] getServletConfigClasses() {
return new Class[]{WebConfig.class};
}
@Override
protected String[] getServletMappings() {
return new String[]{"/"};
}
/**
* 添加UTF-8过滤器
* @param servletContext
* @param filter
* @return
*/
@Override
protected FilterRegistration.Dynamic registerServletFilter(ServletContext servletContext, Filter filter) {
FilterRegistration.Dynamic filterRegistration = servletContext.addFilter("encodingFilter",
new CharacterEncodingFilter());
filterRegistration.setInitParameter("encoding", "UTF-8");
filterRegistration.setInitParameter("forceRequestEncoding", "true");
filterRegistration.setInitParameter("forceResponseEncoding", "true");
filterRegistration.addMappingForUrlPatterns(null, true, "/*");
return super.registerServletFilter(servletContext, filter);
}
}
xml形式
<filter>
<filter-name>characterEncodingFilter</filter-name>
<filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
<init-param>
<param-name>encoding</param-name>
<param-value>UTF-8</param-value>
</init-param>
<init-param>
<param-name>forceResponseEncoding</param-name>
<param-value>true</param-value>
</init-param>
<init-param>
<param-name>forceRequestEncoding</param-name>
<param-value>true</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>characterEncodingFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>