问题

在使用springboot时,发现有个同事报了一个错:

getWriter() has already been called for this response
错误提示也比较明显,是被调用过了。

出错的部分代码如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
try {
//有问题的部份
//PrintWriter out = null;
//out = response.getWriter();
//String json = new ObjectMapper().writeValueAsString(map);
//out.write(json);
//out.flush();
//out.close();

outputStream = response.getOutputStream();
String json = new ObjectMapper().writeValueAsString(map);
outputStream.write(json.getBytes());
outputStream.flush();
outputStream.close();
} catch (IOException e) {
LOGGER.error(e.getMessage(), e);
} finally {
if (outputStream != null) {
try {
outputStream.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}

注释部份为有问题的写法。

原因

response.getWriter() 是流的形式,只能被调用一次,老问题了,代码的下面部分写法解决这个问题。