Spring mock mvc сохраняет расширение файла

Единственный актуальный вопрос, который я смог найти здесь, это этот.

К сожалению, в отличие от вышеупомянутого вопроса, я не использую имена файлов в качестве переменной пути. Что я отправляю в строке, которая может иметь или не иметь '.'. В результате я не хочу использовать стратегию, упомянутую в решении вышеуказанного вопроса.

Это мой WebConfigAdapter:

@Configuration
public class WebConfigAdapter extends WebMvcConfigurerAdapter {
    @Autowired
    HandlerExceptionResolver exceptionHandler;

    /**
     * Disable content negotiation for path extensions.
     * 
     * @param configurer
     */
    @Override
    public void configureContentNegotiation(ContentNegotiationConfigurer configurer) {
            configurer.favorPathExtension(false);
    }

    /**
     * Set the exception handler.
     * 
     * @param exceptionResolvers
     */
    @Override
    public void configureHandlerExceptionResolvers(List<HandlerExceptionResolver> exceptionResolvers) {
            super.configureHandlerExceptionResolvers(exceptionResolvers);
            exceptionResolvers.add(exceptionHandler);
    }

    /**
     * Serve static resources.
     * 
     * @param registry
     */
    @Override
    public void addResourceHandlers(ResourceHandlerRegistry registry) {
            registry.addResourceHandler("/resources/**").addResourceLocations("/resources/");
    }
}

Я импортирую WebConfigAdapater в свой WebConfig (файл Java) следующим образом:

@Configuration
@EnableWebMvc
@Import(value = { WebConfigAdapter.class, WebConfigSupport.class })
public class WebConfig {
    @Bean
    public InternalResourceViewResolver internalResourceViewResolver() {
            InternalResourceViewResolver resolver = new InternalResourceViewResolver();
            resolver.setPrefix("/WEB-INF/views/");
            resolver.setSuffix(".jsp");
            return resolver;
    }

    @Bean
    public HandlerExceptionResolver exceptionHandler() {
            return new ExceptionHandler();
    }
}

И в моем контексте приложения xml:

<bean class="com.quova.platform.portal.config.WebConfig"/>

Я до сих пор не могу понять, когда я использую Spring mock mvc в своих модульных тестах, почему приведенный ниже контроллер получает ввод строки, который он удаляет символы после последнего периода в строке, включая период.

 @RequestMapping(value = "/{ip}", method = RequestMethod.GET, produces = "application/json")
 @ResponseBody
 public Info lookup(@PathVariable("ip") String ip) throws Exception {

Вот как я вызываю указанную выше конечную точку в своем модульном тесте:

String ip = "4.3.2";
mockMvc.perform(get("/secure/resources/iplookup/{ip}", ip)).andExpect(status().isBadRequest());

Итак, теперь контроллер видит «4.3». Кроме того, это мой первый вопрос о переполнении стека, поэтому дайте мне знать, если мне не хватает какой-то необходимой информации или я могу лучше объяснить свой вопрос! Спасибо за помощь!


person bagi    schedule 31.10.2013    source источник
comment
См. это: stackoverflow.com/ вопросы/9020444/   -  person Sotirios Delimanolis    schedule 31.10.2013
comment
@SotiriosDelimanolis У меня также есть поддержка WebMvcConfigurationSupport, как указано в ссылке.   -  person bagi    schedule 01.11.2013
comment
Вы пробовали то, что предлагают оба ответа?   -  person Sotirios Delimanolis    schedule 01.11.2013
comment
Однако использование value = /{ip:.*} работает. Спасибо!   -  person bagi    schedule 01.11.2013
comment
что мне любопытно, так это то, почему это не сработало без изменения значения, когда я устанавливаю расширение пути на false, а шаблон суффикса соответствует false.   -  person bagi    schedule 01.11.2013
comment
вы также можете добавить завершающую косую черту - см. ответы на этот вопрос.   -  person Michał Rybak    schedule 28.12.2013


Ответы (1)


@RequestMapping(value = "/{ip:.*}", method = RequestMethod.GET, produces = "application/json")
 @ResponseBody
 public Info lookup(@PathVariable("ip") String ip) throws Exception {

Это работает

person bagi    schedule 29.11.2018