需求:请求list.json返回以下数据
{ "jsonResult": { "code": 200, "message": "查询成功", "nextUrl": null, "data": [ { "pageNo": 0, "id": 1, "type": "personal", "avatarUrl": null, "source": null, "loginName": "test", "name": "测试人员", "certStatus": 0, "idNum": null, "password": "567", "jobId": "smartTravel", "cellphone": null, "cellphoneActived": false, "email": null, "emailActived": false, "projectName": "测试项目111", "balance": 0, "paymentCode": null, "provinceId": "beijing", "cityId": "xichengqu", "address": "北京市西直门大街3321-1号werer", "enabled": true, "createTime": [ 2019, 9, 25, 14, 11, 38 ] } ] } }
Controller里面有两个方法
@PostMapping(value = "list") public String list(Model model, String name, Integer certStatus, @RequestParam(required = false) LocalDate startDate, @RequestParam(required = false) LocalDate endDate, Integer pageNo,Integer pageSize) { HashMap<String,Object> map = new HashMap<>(); map.put("name",name); map.put("certStatus",certStatus); map.put("startDate",startDate); map.put("endDate",endDate); Page<ApiUser> list = userService.queryPage(map, pageNo,pageSize); model.addAttribute("list", list); return "user2/list"; } @GetMapping(value = "list.json") public JsonResult list(String name, Integer certStatus, @RequestParam(required = false) LocalDate startDate, @RequestParam(required = false) LocalDate endDate, Integer pageNo,Integer pageSize) { HashMap<String,Object> map = new HashMap<>(); map.put("name",name); map.put("certStatus",certStatus); map.put("startDate",startDate); map.put("endDate",endDate); Page<ApiUser> list = userService.queryPage(map, pageNo,pageSize); return successResult("查询成功",list); }
调试的时候每次都进入list.json方法,实际返回结果却是网页代码。也就是返回list方法对应的视图。
只要进行如下配置就好:
/** * 配置多视图解析器 * * @param manager manager 会自动构建,configureContentNegotiation可以进行配置 * @param viewResolvers 当前项目的 viewResolver, (此时会包含上面配置的 freemarkerViewResolver) * @return ContentNegotiatingViewResolver * @see WebMvcConfigurerAdapter#configureContentNegotiation(org.springframework.web.servlet.config.annotation.ContentNegotiationConfigurer) */ @Bean public ContentNegotiatingViewResolver contentNegotiatingViewResolver(ContentNegotiationManager manager, List<ViewResolver> viewResolvers) { ContentNegotiatingViewResolver viewResolver = new ContentNegotiatingViewResolver(); viewResolver.setContentNegotiationManager(manager); // 设置默认view, default view 每次都会添加到 真正可用的视图列表中, json视图没有对应的ViewResolver View jackson2JsonView = new MappingJackson2JsonView(); viewResolver.setDefaultViews(Collections.singletonList(jackson2JsonView)); Map<String, MediaType> mapping = Collections.singletonMap("json", MediaType.valueOf("application/json;charset=UTF-8")); //实测需要加上这个,否则之前通过实体属性序列化成json,返回json的方法容易出错。 MappingMediaTypeFileExtensionResolver extensionsResolver = new MappingMediaTypeFileExtensionResolver(mapping); manager.addFileExtensionResolvers(extensionsResolver); viewResolver.setViewResolvers(viewResolvers); return viewResolver; }
转载自:https://segmentfault.com/a/1190000015721806
类似文章:请求路径@PathVariable注释中有点.英文句号的问题(忽略英文句号后面的后缀)
https://www.programcreek.com/java-api-examples/?class=org.springframework.web.accept.ContentNegotiationManager&method=addFileExtensionResolvers