您的当前位置:首页正文

SpringBoot如何通过注释返回指定的response的contentType格式

2024-11-26 来源:个人技术集锦

省流版:

如下

@RequestMapping(value = "/login",produces = "text/json")

在mapping中加入属性produces,produces的值就是响应头中的contentType啦

上面的produces表示控制器方法产生的响应内容的MIME类型是 "text/json",即指定返回的内容类型为纯文本的JSON格式。

听我水版:

问题场景是这样的:

本人在完成大数据课设的一个作业,偷懒就直接网上找了一份,但是不能照抄吧,总得改一下再交

于是我就对应着代码进行修改。

没想到这个代码 写的挺离谱。

都用springboot了,什么年代了还在用传统servlet编程

如下图

 于是就让我有了大量发挥的机会

自然是使用注解指定参数,抛弃 PrintWriter,使用@ResponseBody直接传回参数

改为了如下

    // 用户登录
    @RequestMapping(value = "/login")
    @ResponseBody
    public String login(@RequestParam(name = "userName") String userName,
                        @RequestParam(name = "password") String password) throws IOException {
        System.out.println("userName= " + userName + " , password= "+password);

        JSONObject json = new JSONObject();
        // 检查用户信息是否正确
        if(!userService.loginCheck(userName,password)){
            System.out.println("未找到相关用户信息!");
            json.put("status","error");
            return json.toJSONString();
        }
        json.put("status","ok");
        json.put("username",userName);
        json.put("currentPath","/"+userName);
        List<HDFSFile> fileList = fileService.getFileList("/" + userName);
        json.put("fileList",fileList);
        System.out.println(fileList);
        return json.toJSONString();
    }

然后类似的controller改了个遍

信心满满运行 之后发现 出现了个奇怪的bug

用户登录提交过后,控制台打印登录成功的信息,但是前端竟然返回“用户名或密码错误”

在网页上检查请求的请求头和响应头后我发现了问题:

        这次响应头的contentType为 “text/plain“

        原来的代码指定了

response.setContentType("text/json; charset=UTF-8");

        那么估计就是因为没有指定响应头,导致前端没有正确解析返回的json数据,从而回显错误信息

        

那么使用注解怎么指定响应的contentType呢?

@RequestMapping(value = "/login",produces = "text/json")

在mapping中加入属性produces,produces的值就是响应头中的contentType啦

显示全文