我有一个 REST API,直到现在它总是返回 JSONP(JSON 数据包装在客户端想要的任何函数调用中):
static final String JAVASCRIPT = "application/javascript;charset=UTF-8";
@RequestMapping(value = "/matches", produces = JAVASCRIPT)
@ResponseBody
public String matches(@RequestParam String callback) {
String json = jsonService.getCachedJson("/matches");
return toJsonp(callback, json);
}
现在,情况发生了变化,因此我需要返回JSON 或 JSONP:如果客户端提供回调函数名称,我们返回 JSONP,否则返回纯 JSON。
关于内容类型,我希望尽可能正确并用于application/json
JSON 和application/javascript
JSONP。
所以,像这样:
@RequestMapping(value = "/matches")
@ResponseBody
public String matches(@RequestParam(required = false) String callback) {
String json = jsonService.getCachedJson("/matches");
// TODO: if callback == null, set content type to "application/json",
// otherwise to "application/javascript"
return jsonOrJsonp(callback, json);
}
String jsonOrJsonp(String callback, String json) {
return Strings.isNullOrEmpty(callback) ? json : toJsonP(callback, json);
}
看起来我不能再produces
使用@RequestMapping
. 在上述场景中,使用 Spring MVC 设置内容类型的最简单方法是什么?
如果可能的话,我想避免定义 HttpMessageConverters (或其他 Spring 麻烦)或更改方法返回类型!显然我不喜欢重复的方法声明,其中produces
值是唯一显着的区别。我正在寻找的是对上述代码的最小更改。
最新的春天 (3.2.3)。