Spring Boot Controller отличается по поведению при вызове от аннотированного теста @MvcTest - PullRequest
0 голосов
/ 03 октября 2018

У меня есть следующий контроллер в Spring (2.0.5)

@RestController
public class FaqController {
    @GetMapping("/faqs")
    public void get(@RequestParam("language") final Locale locale) {
        System.out.println(locale);
    }
}

Когда я выполняю запрос GET через Postman / cURL, используя url: http://localhost:8080/faqs?language, вызывается метод контроллера и localeравно null.

Когда я выполняю тот же URL с аннотированным тестом JUnit @MvcTest, который выглядит следующим образом:

@RunWith(SpringRunner.class)
@WebMvcTest
public class FaqControllerTest {
    @Autowired
    private MockMvc mockMvc;

    @Test
    public void test() throws Exception {
        this.mockMvc.perform(get("/faqs?language"));
    }
}

, тогда метод не вызывается ,вместо этого org.springframework.web.bind.MissingServletRequestParameterException выдается с сообщением: Обязательный параметр локали 'language' отсутствует .

Почему это различие?Я что-то упустил?

1 Ответ

0 голосов
/ 03 октября 2018

Вы хотите, чтобы оно было нулевым?Если он не нужен, либо удалите его, либо установите его как не обязательный.

@RestController
public class FaqController {

   @GetMapping("/faqs")
   public void get(@RequestParam( value = "language", required = false ) final Locale locale) {
       System.out.println(locale);
   }
}
...