springboot攔截json后綴的請求,返回json數據


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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM