use of cn.taketoday.web.handler.method.HandlerMethod in project today-framework by TAKETODAY.
the class RequestResponseBodyMethodProcessorTests method resolveArgumentTypeVariable.
// SPR-9964
@Test
public void resolveArgumentTypeVariable() throws Throwable {
Method method = MyParameterizedController.class.getMethod("handleDto", Identifiable.class);
HandlerMethod handlerMethod = new HandlerMethod(new MySimpleParameterizedController(), method);
MethodParameter methodParam = handlerMethod.getMethodParameters()[0];
String content = "{\"name\" : \"Jad\"}";
this.servletRequest.setContent(content.getBytes(StandardCharsets.UTF_8));
this.servletRequest.setContentType(MediaType.APPLICATION_JSON_VALUE);
List<HttpMessageConverter<?>> converters = new ArrayList<>();
converters.add(new MappingJackson2HttpMessageConverter());
RequestResponseBodyMethodProcessor processor = new RequestResponseBodyMethodProcessor(converters);
SimpleBean result = (SimpleBean) processor.resolveArgument(request, new ResolvableMethodParameter(methodParam));
assertThat(result).isNotNull();
assertThat(result.getName()).isEqualTo("Jad");
}
use of cn.taketoday.web.handler.method.HandlerMethod in project today-framework by TAKETODAY.
the class ReturnValueHandlerManagerTests method addHandler.
@Test
void addHandler() {
ReturnValueHandlerManager manager = new ReturnValueHandlerManager();
HttpStatusReturnValueHandler returnValueHandler = new HttpStatusReturnValueHandler();
manager.addHandlers(returnValueHandler);
assertThat(manager.getHandlers()).hasSize(1);
HttpStatusReturnValueHandler highestValueHandler = new HttpStatusReturnValueHandler();
manager.addHandlers(List.of(highestValueHandler));
assertThat(manager.getHandlers()).hasSize(2);
assertThat(manager.getByReturnValue(HttpStatus.OK)).isNotNull();
assertThat(manager.getByReturnValue("")).isNull();
assertThat(manager.getByReturnValue(null)).isNull();
assertThat(manager.getHandler("")).isNull();
// getHandler(handler)
HandlerMethod handler = Mockito.mock(HandlerMethod.class);
Mockito.when(handler.isReturn(HttpStatus.class)).thenReturn(true);
ActionMappingAnnotationHandler annotationHandler = new ActionMappingAnnotationHandler(handler, null, Object.class) {
@Override
public Object getHandlerObject() {
return null;
}
};
assertThat(manager.getHandler(annotationHandler)).isNotNull();
// obtainHandler
assertThat(manager.obtainHandler(annotationHandler)).isEqualTo(returnValueHandler).isNotNull();
// sort
// returnValueHandler.setOrder(2);
// highestValueHandler.setOrder(1);
assertThat(manager.obtainHandler(annotationHandler)).isEqualTo(highestValueHandler).isNotNull();
// returnValueHandler.setOrder(1);
// highestValueHandler.setOrder(2);
assertThat(manager.obtainHandler(annotationHandler)).isEqualTo(returnValueHandler).isNotNull();
assertThatThrownBy(() -> manager.obtainHandler("")).isInstanceOf(ReturnValueHandlerNotFoundException.class).hasMessageStartingWith("No ReturnValueHandler for handler");
}
use of cn.taketoday.web.handler.method.HandlerMethod in project today-framework by TAKETODAY.
the class RequestResponseBodyMethodProcessorTests method handleReturnValueCharSequence.
// SPR-13423
@Test
public void handleReturnValueCharSequence() throws Throwable {
List<HttpMessageConverter<?>> converters = new ArrayList<>();
converters.add(new ByteArrayHttpMessageConverter());
converters.add(new StringHttpMessageConverter());
Method method = ResponseBodyController.class.getMethod("handleWithCharSequence");
RequestResponseBodyMethodProcessor processor = new RequestResponseBodyMethodProcessor(converters);
processor.handleReturnValue(request, new HandlerMethod(this, method), new StringBuilder("Foo"));
assertThat(servletResponse.getHeader("Content-Type")).isEqualTo("text/plain;charset=UTF-8");
assertThat(servletResponse.getContentAsString()).isEqualTo("Foo");
}
use of cn.taketoday.web.handler.method.HandlerMethod in project today-framework by TAKETODAY.
the class RequestResponseBodyMethodProcessorTests method resolveArgumentTypeVariableWithGenericInterfaceAndSubclass.
// gh-24127
@Test
public void resolveArgumentTypeVariableWithGenericInterfaceAndSubclass() throws Throwable {
this.servletRequest.setContent("\"foo\"".getBytes(StandardCharsets.UTF_8));
this.servletRequest.setContentType(MediaType.APPLICATION_JSON_VALUE);
Method method = SubControllerImplementingInterface.class.getMethod("handle", Object.class);
HandlerMethod handlerMethod = new HandlerMethod(new SubControllerImplementingInterface(), method);
MethodParameter methodParameter = handlerMethod.getMethodParameters()[0];
List<HttpMessageConverter<?>> converters = new ArrayList<>();
converters.add(new MappingJackson2HttpMessageConverter());
RequestResponseBodyMethodProcessor processor = new RequestResponseBodyMethodProcessor(converters);
assertThat(processor.supportsParameter(new ResolvableMethodParameter(methodParameter))).isTrue();
String value = (String) processor.readWithMessageConverters(this.request, methodParameter, methodParameter.getGenericParameterType());
assertThat(value).isEqualTo("foo");
}
use of cn.taketoday.web.handler.method.HandlerMethod in project today-framework by TAKETODAY.
the class RequestResponseBodyMethodProcessorTests method jacksonJsonViewWithResponseBodyAndJsonMessageConverter.
@Test
public void jacksonJsonViewWithResponseBodyAndJsonMessageConverter() throws Throwable {
Method method = JacksonController.class.getMethod("handleResponseBody");
HandlerMethod handlerMethod = new HandlerMethod(new JacksonController(), method);
MethodParameter methodReturnType = handlerMethod.getReturnType();
List<HttpMessageConverter<?>> converters = new ArrayList<>();
converters.add(new MappingJackson2HttpMessageConverter());
RequestResponseBodyMethodProcessor processor = new RequestResponseBodyMethodProcessor(converters, null, Collections.singletonList(new JsonViewResponseBodyAdvice()));
Object returnValue = new JacksonController().handleResponseBody();
processor.handleReturnValue(request, handlerMethod, returnValue);
String content = this.servletResponse.getContentAsString();
assertThat(content.contains("\"withView1\":\"with\"")).isFalse();
assertThat(content.contains("\"withView2\":\"with\"")).isTrue();
assertThat(content.contains("\"withoutView\":\"without\"")).isFalse();
}
Aggregations