【发布时间】:2017-08-17 13:08:31
【问题描述】:
所以我有这个 RESTful Spring Boot API,它从文件系统中读取一个 JS 文件并公开这个文件的内容。目前,这就是我将该 JS 文件的内容返回给 API 使用者的方式:
return ResponseEntity.ok().header("Content-Type", "application/javascript").body(jsText) // jsText is a String variable
这是(部分)API 使用者看到的:
(function (w, d, s, l, i) {
w[l] = w[l] || [];
w[l].push({});
....)
现在我正在开发一个完全不相关的功能,需要我引入一个配置类来配置 java.time 类的 Jackson 序列化:
@Configuration
class WebConfig extends WebMvcConfigurerAdapter {
private final static String DATE_TIME_PATTERN = "yyyy-MM-dd'T'HH:mm:ss'Z'"
@Autowired
private ObjectMapper objectMapper
@Override
void configureMessageConverters(List<HttpMessageConverter<?>> converters) {
MappingJackson2HttpMessageConverter jacksonConverter = new MappingJackson2HttpMessageConverter()
DateFormat dateFormat = new SimpleDateFormat(DATE_TIME_PATTERN, Locale.default)
objectMapper.setDateFormat(dateFormat)
objectMapper.registerModule(new JavaTimeModule())
jacksonConverter.setObjectMapper(objectMapper)
converters.add(jacksonConverter)
super.configureMessageConverters(converters)
}
}
这就是我的问题开始的地方。一旦我添加了converters.add(jacksonConverter) 行,来自同一端点的响应就变成了这样:
"(function (w, d, s, l, i) {\n w[l] = w[l] || [];\n w[l].push({});\n..."
(注意其中的" 和\n 字符)
现在,我在这里做错了什么?如果我查看响应标头,更改后它仍然显示application/javascript,但是为什么内容会更改?
我能以某种方式避免/解决这个问题吗?我的意思是,我仍然需要关于 JavaTimeModule 的部分,但希望避免破坏 API 使用者(他们无法解析带有 " 和 \n 的版本...)
谢谢!
【问题讨论】: