需求:請求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