2

私は今まで常に JSONP を返す REST API を持っています (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 を返します。

コンテンツ タイプに関しては、できるだけ正確にして JSON とJSONPに使用application/jsonapplication/javascriptしたいと思います。

したがって、次のようなものです。

@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)。

4

1 に答える 1