java - 如何验证@RequestParams 不为空?

标签 java spring-boot junit4 bean-validation jsr

我有一个计算器服务,它从用户那里获取操作类型 num1 和 num2。我需要验证用户是否实际输入了这些值,而不是将其留空。

@RequestMapping(value = "/calculate")
@ResponseBody
public CalculationResult calculate(@RequestParam(name = "op") String operation, @RequestParam(name = "num1") Double num1, @RequestParam(name = "num2") Double num2) {
    System.out.print("Operation:" + operation);
    Double calculate = calculatorService.calculate(operation, num1, num2);
    return new CalculationResult(calculate);
}

我有一个需要通过的集成测试,因为它目前因错误而失败:

{\"timestamp\":1488875777084,\"status\":400,\"error\":\"Bad Request\",\"exception\":\"org.springframework.web.method.annotation.MethodArgumentTypeMismatchException\",\"message\":\"Failed to convert value of type 'java.lang.String' to required type 'java.lang.Double';

下面是我的测试用例:

@Test
public void validates_all_parameters_are_set() throws Exception {
    ResponseEntity<String> response = template.getForEntity( "/calculate?op=&num1=&num2=",
            String.class);
    assertThat(response.getStatusCode(), equalTo(HttpStatus.BAD_REQUEST));
    assertThat(response.getBody(), equalTo("{\"error\":\"At least one parameter is invalid or not supplied\"}"));
}

我不知道如何验证这一点。

最佳答案

我很久以前就回答过类似的问题here您也可以按照它来编写测试,如下所示:

@Validated
public class CalculationController {

    @RequestMapping(value = "/calculate")
    @ResponseBody
    public CalculationResult calculate(
            @Valid @NotBlank @RequestParam(name = "op") String operation,
            @Valid @NotNull @RequestParam(name = "num1") Double num1,
            @Valid @NotNull @RequestParam(name = "num2") Double num2) {
        System.out.print("Operation:" + operation);
        Double calculate = calculatorService.calculate(operation, num1, num2);
        return new CalculationResult(calculate);
    }
}

应修改相应的@Test 以测试一组"may not be null" 消息,如:

@Test
public void validates_all_parameters_are_set() throws Exception {
    ResponseEntity<String> response = template.getForEntity( "/calculate?op=&num1=&num2=",
                String.class);
    assertThat(response.getStatusCode(), equalTo(HttpStatus.BAD_REQUEST));
    assertThat(response.getBody(), equalTo("{\"error\":[\"may not be null\",\"may not be null\"]}"));
}

关于java - 如何验证@RequestParams 不为空?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42643878/

相关文章:

java - 在可编辑 JComboBox 上调用 getSelectedItem() 时出现 NullPointerException

java - 使用 java.io.file 的 jenkins 管道始终引用 master

java - 在给定整数的叉积中生成一行

java - 为什么passwordEncoder()作为@Bean?

java - Spring Boot 集成测试不读取属性文件

JavaFX 如何最小化 ImageView 点击窗口?

java - XML 到 java 对象的最佳 api

gradle - 如何在 Gradle 构建文件中正确排除 "junit-vintage-engine"?

junit - 是否有机会向 JUnit 测试添加描述?

java - Android 项目中的 Junit 与响应式编程