如下
@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啦