나는 일반적인 방법으로 스프링 MVC를 사용하고, @RequestMapping
메소드, Freemarker 정의 등을 포함하는 스프링 부트 애플리케이션을 가지고있다. 이것은 모두 WebMvcConfigurerAdapter
클래스와 함께 묶여 있습니다.URL을 구문 분석하고 '반영하도록'스프링 MVC를 사용하여 메소드를 실행하는 방법은 무엇입니까?
사용자가 유효한 URL 목록을 제출하고 웹 응용 프로그램이 호출되어 컨트롤러를 호출하고 매개 변수를 전달하고 모든 URL에 대해 결합 된 결과를 반환하는 서비스를 제공하고 싶습니다. 하나의 요청.
이렇게하면 사용자가 수백 개의 HTTP 호출을하지 않아도되지만 필요한 경우 일회용 요청을 할 수 있습니다. 이상적으로는 자동 구성된 Spring 빈을 삽입하기 때문에 내부적으로 Spring이 해결하고 처리하는 URL을 반복 할 필요가 없으며 컨트롤러의 다른 컨트롤러 목록은 과 동기화되지 않습니다. 실제 컨트롤러 목록입니다.
내가 (이해하기 무의미하지만 쉽게 하나 개의 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";
}
}
, 나는 스프링 빈을 내가하지 정의 했어
// 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 MVC 요청을 어떻게 시뮬레이트합니까?
여기의 진정한 이점은 무엇입니까? 고객이 많은 요청을하는 것은 전적으로 일반적이며, 문제로 간주되지 않습니다. 요청은 여전히 전송되어야하며 일괄 처리하면 속도가 크게 향상되지 않습니다. – chrylis
실제 사용 사례는 문서에서 URL을 추출하여 처리 된 결과가있는 동일한 문서를 반환하므로 오프라인으로 사용할 수 있습니다 (또는 서버가 다운 된 경우) –
그런 다음 호출을 다시 호출하십시오. – chrylis