配置Spring MockMvc以在内置参数解析器之前使用自定义参数解析器

时间:2017-03-01 04:38:54

标签: spring unit-testing spring-mvc spring-boot

我有一个简单的测试用例。我有一个控制器,它有一个Spring默认不支持的参数,所以我写了一个自定义解析器。

我使用这样的方式创建了模拟mvc实例:

$artist = $em->getRepository("AppBundle:Artist")->find(2);
$entity->setArtist($artist)
// Load the form here. The default value automatically set in the form

然而,Spring还注册了近30个其他的参数解析器,其中一个足够通用,以至于它在我之前被用来解决这个参数。如何设置或排序解析器以便首先调用我的?

2 个答案:

答案 0 :(得分:0)

问题在于我使用的Google OAuth库People类扩展了Map,而模拟servlet API无法操纵处理程序的注册顺序。

我最终使用反射进入模拟内脏并移除违规处理程序。

答案 1 :(得分:0)

这对我有效,没有思考:

@RequiredArgsConstructor
@Configuration
public class CustomerNumberArgumentResolverRegistration {

  private final RequestMappingHandlerAdapter requestMappingHandlerAdapter;

  @PostConstruct
  public void prioritizeCustomArgumentResolver () {
    final List<HandlerMethodArgumentResolver> argumentResolvers = new ArrayList<>(Objects.requireNonNull(requestMappingHandlerAdapter.getArgumentResolvers()));
    argumentResolvers.add(0, new CustomerNumberArgumentResolver());
    requestMappingHandlerAdapter.setArgumentResolvers(argumentResolvers);
  }

}