概念
1)MediaType,即是Internet Media Type撞反,互聯(lián)網(wǎng)媒體類型妥色;也叫做MIME類型。
2)Content-Type代表發(fā)送端(客戶端|服務(wù)器)發(fā)送的實(shí)體數(shù)據(jù)的數(shù)據(jù)類型遏片。
3)Accept代表發(fā)送端(客戶端)希望接受的數(shù)據(jù)類型嘹害。
4)常見的MediaType
text/html、text/xml吮便、image/png
application/json笔呀、application/x-www-form-urlencoded (表單默認(rèn)的提交數(shù)據(jù)的格式)、multipart/form-data (文件上傳)
5)導(dǎo)出excel髓需,返回字節(jié)數(shù)組response.setContentType("application/vnd.ms-excel;charset=utf-8");
response.setHeader("Content-Disposition", "attachment; filename=" + URLEncoder.encode("中文url編碼","UTF-8") + ".xls");
6)類型格式:type/subtype(;parameter)
1许师,Spring視圖解析
1)jsp視圖解析
@Bean//配置視圖解析viewResolver(spring mvc的9大組件)
public InternalResourceViewResolver internalResourceViewResolver(){
InternalResourceViewResolver internalResourceViewResolver = new InternalResourceViewResolver();
internalResourceViewResolver.setPrefix("/WEB-INF/jsp/");
internalResourceViewResolver.setSuffix(".jsp");
return internalResourceViewResolver;
}
2)thymeleaf視圖解析(需要引入compile 'org.thymeleaf:thymeleaf-spring4:3.0.3.RELEASE'和compile 'org.thymeleaf:thymeleaf:3.0.3.RELEASE'
)
@Bean
public ThymeleafViewResolver thymeleafViewResolver(){
ThymeleafViewResolver thymeleafViewResolver = new ThymeleafViewResolver();
thymeleafViewResolver.setOrder(1);
thymeleafViewResolver.setCharacterEncoding("utf-8");
thymeleafViewResolver.setTemplateEngine(templateEngine());
return thymeleafViewResolver;
}
@Bean
public SpringTemplateEngine templateEngine(){
SpringTemplateEngine templateEngine = new SpringTemplateEngine();
templateEngine.setTemplateResolver(templateResolver());
templateEngine.setEnableSpringELCompiler(true);
templateEngine.addDialect("shiro", new ShiroDialect());
return templateEngine;
}
@Bean
public SpringResourceTemplateResolver templateResolver(){
SpringResourceTemplateResolver templateResolver = new SpringResourceTemplateResolver();
templateResolver.setPrefix("/WEB-INF/templates/");
templateResolver.setSuffix(".html");
templateResolver.setTemplateMode("HTML5");
templateResolver.setCacheable(false);//設(shè)置熱部署
templateResolver.setOrder(1);
templateResolver.setCharacterEncoding("UTF-8");
return templateResolver;
}
2,基于視圖的method與基于restful的method僚匆。
@Controller
class AccountController {
// RESTful method
@RequestMapping(value="/accounts", produces={"application/xml", "application/json"})
@ResponseBody//會經(jīng)過內(nèi)容協(xié)商微渠,返回具體的視圖
public List<Account> listWithMarshalling(Principal principal) {
return accountManager.getAccounts(principal);
}
// View-based method
@RequestMapping("/accounts")//`會使用配置的viewResolver`
public String listWithView(Model model, Principal principal) {
// Call RESTful method to avoid repeating account lookup logic
model.addAttribute( listWithMarshalling(principal) );
// Return the view to use for rendering the response
return ¨accounts/list¨;
}
}
3,重寫WebMvcConfigurerAdapter的configureContentNegotiation方法白热,配置內(nèi)容協(xié)商的策略敛助。
/**
* 配置內(nèi)容協(xié)商的策略
*/
@Override
public void configureContentNegotiation(ContentNegotiationConfigurer configurer) {
Map<String, MediaType> mediaTypeMap = new HashMap<>();
mediaTypeMap.put("html", MediaType.TEXT_HTML);
mediaTypeMap.put("json", MediaType.APPLICATION_JSON);
mediaTypeMap.put("atom", MediaType.APPLICATION_ATOM_XML);
configurer.favorParameter(false)//是否支持format=json參數(shù)
.favorPathExtension(false).useJaf(false)//是否支持.json .xml等擴(kuò)展名
.ignoreAcceptHeader(true)//忽視Accept請求頭
.defaultContentType(MediaType.APPLICATION_JSON)//默認(rèn)返回的context-type
.mediaTypes(mediaTypeMap);
super.configureContentNegotiation(configurer);
}
4,配置內(nèi)容協(xié)商的多視圖解析器屋确。
@Bean
public ContentNegotiatingViewResolver contentNegotiatingViewResolver(){
ContentNegotiatingViewResolver contentNegotiatingViewResolver = new ContentNegotiatingViewResolver();
List<ViewResolver> viewResolverList = new ArrayList<>();
viewResolverList.add(thymeleafViewResolver());
List<View> viewList = new ArrayList<>();
viewList.add(mappingJackson2JsonView()); // 配置默認(rèn)視圖解析
contentNegotiatingViewResolver.setOrder(1);
contentNegotiatingViewResolver.setViewResolvers(viewResolverList);
contentNegotiatingViewResolver.setDefaultViews(viewList);
return contentNegotiatingViewResolver;
}
@Bean
public MappingJackson2JsonView mappingJackson2JsonView(){
return new MappingJackson2JsonView();//使用MappingJackson2JsonView 配合@ResponseBody來返回JSON格式
}