18

私はSpringFrameworkを初めて使用します。グーグルで検索しているときに、クラスレベルで@RequestMappingに注釈が付けられた例と、menthodレベルでそれを示した例をいくつか見つけました。

クラスレベルのRequestMappingとmenthodレベルのRequestMappingアノテーションを使用する場合...クラスレベルのRequestMappingとメソッドレベルのRequestMappingの違いを誰かに説明してもらえますか..??

だから私は彼らのアプリケーションについて少し混乱しています:

a)クラスレベル

b)メソッドレベル

また@Requestmapping、タイプが:GET / Postの例もありますが、タイプパラメーターがない例もあります。

どちらのアプローチが良いですか..??

新しいバージョン(> Spring 2.5)は、リクエストマッピングにパラメータタイプを必要としませんか?

4

3 に答える 3

18

@Controllerコントローラは、クラスレベルでマークする必要があります。アノテーションは、@RequestMappingクラスレベルとメソッドレベルの両方で適用できます。そうである場合、メソッドアノテーションは相対URL(クラスレベルのURLに対して)として解釈されます。ただし、メソッドレベルのアノテーションが存在する必要があります。存在しない場合、メソッドはマップされません。

注釈では、パラメータをデフォルト値でオプションとしてマークできます。メソッドパラメータはそのような場合です。デフォルトはですGETが、明示的にPOSTまたは他の何かに設定できます。

見る:

于 2012-05-03T06:40:23.530 に答える
1

特にSpringMVCで最も重要な違いの1つは、ABSOLUTEパスRELATIVEパスです。

ご存知のとおり: Spring MVCでは、ビューをまたはオブジェクト
として返すことができStringModelAndView

重要な注意:
どちらの場合も、相対/絶対パスに注意を払う必要があります:

  1. /ビュー名の先頭で宣言する場合は、絶対パスを使用しています。つまり、クラスレベル
    は関係なく、最終的なビュー名として直接導入されます。 @RequestMapping
  2. ビュー名の先頭で宣言しない場合は、相対パス(クラスパスに対する相対パス)を使用しているため、クラスレベルに追加されて最終的なビュー名が作成されます。/ @RequestMapping

したがって、Spring MVCを使用する場合は、上記の注意事項を考慮する必要があります。

例:
1。2つのHTMLファイルtest1.htmlを作成し、spring(ブート)構造test2.htmlのフォルダーに作成します。相対パスの場合、クラスレベルはフォルダーパスとして動作する ことに注意してください。static
@RequestMapping

--- resources
    --- static
        --- classLevelPath     //behaves as a folder when we use relative path scenario in view names   
            --- test2.html      //this will be used for relative path [case (2)]
        --- test1.html          //this will be used for absolute path [case (1)]

  1. 以下のようなコントローラクラスを作成します。この例は、リターンがStringあり、相対パスと絶対ModelAndViewパスの両方でのさまざまなケースを示しています。

@Controller
@RequestMapping("/classLevelPath")
public class TestController {

    //case(1)
    @RequestMapping("/methodLevelAbsolutePath1")
    public String absolutePath1(Model model){
        //model.addAttribute();
        //...
        return "/test1.html";  
    }

    //case(1)
    @RequestMapping("/methodLevelAbsolutePath2")
    public ModelAndView absolutePath2(Model model){
        ModelAndView modelAndView = new ModelAndView("/test1.html");
        //modelAndView.addObject()
        //....
        return modelAndView; 
    }

    //case(2)
    @RequestMapping("/methodLevelRelativePath1")
    public String relativePath1(Model model){
        //model.addAttribute();
        //...
        return "test2.html";
    }

    //case(2)
    @RequestMapping("/methodLevelRelativePath2")
    public ModelAndView relativePath2(Model model){
        ModelAndView modelAndView = new ModelAndView("test2.html");
        //modelAndView.addObject()
        //....
        return modelAndView;  
    }


}

注:
ビューファイルのサフィックスはViewResolver(たとえばInternalResourceViewResolver、またはSpring Bootspring.mvc.view.suffix=.htmlのファイルで指定できますが、上記のコードではサフィックスをappliction.properties宣言しないでください)。.html

宜しくお願いします

于 2020-03-19T19:47:46.373 に答える
-1

最後の質問、つまりどちらが優れているかを答えるために、本番環境ではこれら2つの組み合わせを使用します。たとえば、ユーザーコントローラーがある場合、クラスを「/ user」にgetSettings()マップし、forのメソッドは「/ settings」にマップし、のメソッドはgetPermissions()「/permissions」にマップします。

これらのメソッドを「/user/settings」および「/user/ permissions」に直接マップすることも、クラスのマッピングをスキップすることもできます。しかし、ほとんどの場合、最初のアプローチを好みます。

于 2017-10-18T09:48:10.330 に答える