6

私は Spring 3.1 で新しいプロジェクトを開始しており、@Controller アノテーションの使用方法に関するすべてのドキュメントとフォーラムの意見に注目しています。

個人的には、MVC に注釈を使用するのは好きではありません。私は、SimpleUrlHandlerMapping を使用して、Web アプリケーションのすべての URL を 1 か所で利用できるようにすることを好みます。

また、Spring 2.x を使用した以前の多くの作業から、私は BaseCommandController 階層構造に非常に慣れています。

制限することなく力を与えてくれるので、私はいつも春が大好きです。ここで、Spring MVC が URL を Java ソースに配置することを強制していることに気付きました。つまり、(a) コントローラーを複数の URL にマップすることはできず、(b) Web アプリケーションで使用されている URL を検出するには、スキャンする必要があります。さまざまなJavaソースファイルを使用しますが、これは非現実的です。

@Controller と SimpleUrlHandlerMapping を組み合わせる推奨される方法は何ですか?


アップデート:

こんにちはデイブ、このように複数の URL をマップできると言っているのですか (petclini.web.ClinicController から変更)?

@RequestMapping({"/vets", "/another"})
public ModelMap vetsHandler() {

これが機能する場合は、良いです。

私の質問はまだ残っています.JavaソースにURLが必要ない場合、@ControllerクラスでURLをマップするにはどうすればよいですか?

よろしく、

4

1 に答える 1

3

以下は、アノテーションとアノテーションなしのコントローラーをサポートするための簡単なセットアップです。

Dispatcher サーブレット構成 xml

<mvc:annotation-driven/>
<bean id="testController" class="com.test.web.TestController"/>
<bean class="org.springframework.web.servlet.mvc.SimpleControllerHandlerAdapter"/>
<bean class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping">
  <property name="mappings">
      <value>
      /test=testController
      </value>
  </property>
  <property name="order" value="0"/>
</bean>

シンプルな URL マップ コントローラー

public class TestController implements Controller {

    @Override
    public ModelAndView handleRequest(HttpServletRequest request, HttpServletResponse response) throws Exception {
        PrintWriter responseWriter = response.getWriter();
        responseWriter.write("test");
        responseWriter.flush();
        responseWriter.close();
        return null;
    }
}

mvc annotation-config のコントローラー

@Controller
@RequestMapping("/home")
public class HomeController {

    @RequestMapping(method = RequestMethod.GET)
    @ResponseBody
    public String dashboard(Model model, HttpServletRequest request) {
        return "home";
    }
}

@Controller アノテーションに独自のハンドラーを使用する場合。ClassPathBeanDefinitionScannerおそらくとを調べることができますDefaultAnnotationHandlerMapping.determineUrlsForHandlerMethods

于 2012-07-05T12:57:37.240 に答える