1

私がする必要があるケースがあります:

  • ブログが変更されていない場合は、304 not modified ステータスを返します
  • または、If-Modified-Since リクエスト ヘッダー以降に変更されている場合は、ブログ ビューを返します

問題は、304 ステータスを返したいときです。null リターンから別のビューを想定しないように spring mvc に指示し、ステータスを含む応答の送信をすぐに開始するにはどうすればよいですか?

@RequestMapping(value={"/blogs/{blogId}"}, method=RequestMethod.GET)
public String hello(final HttpServletRequest req, final HttpServletResponse resp, final Model model,
        @PathVariable("blogId") final String blogId) {
    if (isModified(req, blogId)) {
        resp.setStatus(HttpServletResponse.SC_NOT_MODIFIED);
        return null; // this doesnt stop spring mvc to assume a view name
    }

    populate(model, grabBlog(blogId));
    return "blog";
}
4

2 に答える 2

2

HTTP の観点からは、ビューを返すことはまったく意味がありません。Springのドキュメントでは、そのユース ケースについて説明しています。

@RequestMapping
public String myHandleMethod(WebRequest webRequest, Model model) {

    long lastModified = // 1. application-specific calculation

    if (request.checkNotModified(lastModified)) {
        // 2. shortcut exit - no further processing necessary
        return null;
    }

    // 3. or otherwise further request processing, actually preparing content
    model.addAttribute(...);
    return "myViewName";
}

注意すべき重要な要素が 2 つあります。呼び出しrequest.checkNotModified(lastModified)と戻りnullです。前者は、true を返す前に応答ステータスを 304 に設定します。後者は、前者と組み合わせて、Spring MVC がリクエストのそれ以上の処理を行わないようにします。

于 2014-01-12T12:18:51.650 に答える