相关疑难解决方法(0)

Spring Web MVC - 验证个人请求参数

我在Spring Web MVC 3.0中运行一个webapp,我有许多控制器方法,其签名大致如下:

@RequestMapping(value = "/{level1}/{level2}/foo", method = RequestMethod.POST)
public ModelAndView createFoo(@PathVariable long level1,
        @PathVariable long level2,
        @RequestParam("foo_name") String fooname,
        @RequestParam(value = "description", required = false) String description);
Run Code Online (Sandbox Code Playgroud)

我想添加一些验证 - 例如,description应该限制​​在一定长度或fooname应该只包含某些字符.如果此验证失败,我想向用户返回一条消息,而不是仅抛出一些未经检查的异常(如果我让数据渗透到DAO层,那么无论如何都会发生这种情况).我知道JSR303,但没有使用它,并不太明白如何在Spring上下文中应用它.

根据我的理解,另一种选择是绑定@RequestBody到整个域对象并在那里添加验证约束,但是目前我的代码被设置为接受如上所示的各个参数.

使用此方法将验证应用于输入参数的最直接方法是什么?

java validation spring spring-mvc

48
推荐指数
3
解决办法
7万
查看次数

如果它不是Spring MVC中的bean,如何验证请求参数?

下面是我的spring MVC REST服务中的POST端点.我想使用spring验证框架工作来确保我收到的列表不为空.我该怎么做?我必须在周围提供包装豆listOfLongs吗?

    @RequestMapping(value = "/some/path", method = RequestMethod.POST)
    @ResponseBody
    public Foo bar(@Valid @NotEmpty @RequestBody List<Long> listOfLongs) {

     /*   if (listOfLongs.size() == 0) {
            throw new InvalidRequestException();
        }
     */

        // do some useful work
    }
Run Code Online (Sandbox Code Playgroud)

请求机构应该是什么?

1) [123,456,789]
2) { listOfLongs : [123,456,789]}
Run Code Online (Sandbox Code Playgroud)

java rest json spring-mvc spring-validator

5
推荐指数
1
解决办法
4649
查看次数

如何验证@RequestParams是否为空?

我有一个计算器服务,从用户获取操作类型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);
}
Run Code Online (Sandbox Code Playgroud)

我有一个集成测试,我需要传递,因为它当前失败并出现错误:

{\"timestamp \":1488875777084,\"status \":400,\"error \":\"Bad Request \",\"exception \":\"org.springframework.web.method.annotation.MethodArgumentTypeMismatchException\",""message \":\"无法将'java.lang.String'类型的值转换为必需类型'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\"}"));
}
Run Code Online (Sandbox Code Playgroud)

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

java junit4 jsr bean-validation spring-boot

4
推荐指数
2
解决办法
1万
查看次数