私は通常の方法で、@RequestMapping
メソッド、Freemarkerの定義などを束ねてSpring MVCを使用するSpring Bootアプリケーションを持っています。これはすべてWebMvcConfigurerAdapter
クラスで結ばれています。URLを解析し、Spring MVCでメソッドを「反映する」方法
ユーザーが有効なURLのリストを送信するサービスを提供したいと思います。ウェブアプリケーションは、呼び出されるコントローラーを決定し、パラメーターを渡し、すべてのURLの結合結果を返します1件のリクエスト。
これにより、ユーザーは何百ものHTTPコールを行う必要がなくなりますが、必要に応じて一度限りのリクエストを行うことができます。理想的には、私はちょうど自動的に設定されたSpring Beanを挿入するので、URLを繰り返して、Springが内部的に行う解決と適応と処理を繰り返す必要はなく、他のコントローラのコントローラのリストはrealコントローラのリスト。私はこのような何かを書くことを期待
(だけに単純化は無意味が、理解しやすい1つのURLに対処):
@Autowired BeanThatSolvesAllMyProblems allMappings;
@PostMapping(path = "/encode", consumes = MediaType.TEXT_PLAIN_VALUE)
@ResponseBody
public String encode(@RequestBody String inputPath) {
if (allMappings.hasMappingForPath(inputPath)) {
return allMappings.getMapping(inputPath).execute();
} else {
return "URL didn't match, sorry";
}
}
を代わりに、私は私にはないのSpring Beanを定義しなければなりませんでした彼らは何をすべきか知っていると、ユーザはちょうど自分自身を呼び出して作られた場合、私は心配している春が私のために行うことを意図しているもののいくつかを、繰り返してきたことは、それと同じように、非常に同じを動作しません。
// these two are @Beans, with just their default constructor called.
@Autowired RequestMappingHandlerMapping handlers;
@Autowired RequestMappingHandlerAdapter adapter;
@PostMapping(path = "/encode", consumes = MediaType.TEXT_PLAIN_VALUE)
@ResponseBody
public String encode(@RequestBody String inputText) {
final HttpServletRequest mockRequest = new MockHttpServletRequest(null, inputText);
final StringBuilder result = new StringBuilder();
this.handlers.getHandlerMethods().forEach((requestMappingInfo, handlerMethod) -> {
if (requestMappingInfo.getPatternsCondition().getMatchingCondition(mockRequest) != null) {
try {
final MockHttpServletResponse mockResponse = new MockHttpServletResponse();
result.append("Result: ").append(adapter.handle(mockRequest, mockResponse, handlerMethod));
result.append(", ").append(mockResponse.getContentAsString());
result.append("\n");
} catch (Exception e) {
logger.error(e.getMessage(), e);
}
}
});
return result.toString();
}
私はかなりやっていると思ったこのパスをよく下っていますが、それはエラーMissing URI template variable
で失敗しています。(Springがそれ自身を処理できる別のもの)リクエストパラメータをどのように置くべきかわからないだけでなく、これを行うことについて正しい道があります。だから、Webアプリケーション自体の中から、Spring MVCリクエストを「反射的に」シミュレートするにはどうすればよいですか?
本当のメリットは何ですか。クライアントが多くのリクエストを行うのはまったく普通のことですが、それは問題とはみなされません。依然として依頼を送信しなければならず、何らかの方法でバッチ処理すると大幅なスピードアップは得られません。 – chrylis
実際の使用例は、ドキュメントからURLを抽出し、処理された結果を含む同じドキュメントを返すので、オフラインで利用できます(またはサーバーがダウンした場合) –
その後、呼び出しを再呼び出しします。 – chrylis