a_jian 2015-05-30 13:12 采纳率: 0%
浏览 5068

spring-rest风格传参问题

最近手上一个项目,碰到spring REST风格传参的问题,参考代码:

@RequestMapping(value="/aa/{bb}/w/{width}/h/{high}", method=RequestMethod.GET) 
    public void testRest(@PathVariable("bb") String name, 
            @PathVariable("width") String width, 
            @PathVariable("high") String high, HttpServletResponse res) {
        //...
    }

完整访问路径:
http://localhost:8080/Test/aa/bb/w/100/h/100

现在涉及关联系统会有其中某个参数不传的情况,如:
http://localhost:8080/Test/aa/bb/w/100 --这里h参数没传,默认它的值为 0
http://localhost:8080/Test/aa/bb/h/100 --这里w参数没传,默认它的值为 0

但@RequestMapping标签又必须得全部参数匹配到才行,现在我能想到的几种思路:
1.缩短@RequestMapping("/aa/{bb}")从请求里面得到url,再对参展做相应处理
2.在配置文件里面添加拦截器针对我的Controller的方法的映射路径做正则匹配
3.在@RequestMapping ()里面用正则做匹配处理(首选)

第1种方式基本pass了,正则表达是弱项,望各种大神指教下,2、3二种处理方式
正则表达示该怎么写,好匹配上面二种某个参数不传的情况呢?

谢谢!~

  • 写回答

1条回答 默认 最新

  • 你知我知皆知 2024-08-03 22:48
    关注

    以下回答参考 皆我百晓生券券喵儿 等免费微信小程序相关内容作答,并由本人整理回复。

    要解决这个问题,你可以使用Spring MVC中的@RequestParam注解来获取请求参数。你可以在RequestMapping中设置value属性,并且在对应的控制器方法上使用@RequestParam注解。

    例如,如果你想要接受两个参数 nameage,并且它们都必需,你可以这样做:

    @GetMapping("/test")
    public ResponseEntity<String> test(@RequestParam String name, @RequestParam int age) {
        return new ResponseEntity<>("Hello " + name + " " + age, HttpStatus.OK);
    }
    

    在这个例子中,@RequestParam(name = "name", required = true)@RequestParam(name = "age", required = true)分别表示这两个参数都是必需的。required = true意味着如果这些参数不在请求中,则返回错误状态码。

    如果你想让某些参数可以为空,你可以使用@RequestParam(name = "name", defaultValue = "")@RequestParam(name = "age", defaultValue = 0)。这样,即使没有这些参数,服务器也会返回正确的状态码。

    此外,你还可以使用@RequestParam注解的默认值来避免在URL中传递多余的参数,因为默认值将被用于替换任何未提供的参数。

    最后,为了防止空值的输入,你可以使用@Valid@Validated注解来验证请求数据的有效性。

    评论

报告相同问题?