首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在spring-rest中嵌套@PathVariable?

如何在spring-rest中嵌套@PathVariable?
EN

Stack Overflow用户
提问于 2015-09-01 16:42:06
回答 3查看 635关注 0票数 3

我有一个简单的@RestController服务,它接受查询参数,spring自动将它们解析成bean

代码语言:javascript
复制
@ResponseStatus(HttpStatus.OK)
@RequestMapping(value = "/rest", method = RequestMethod.GET)
public MyDTO getGiataHotel(@Valid MyParams p) {
    Sysout(p.getId()); //prints "123"
}

public class MyParams {
    private int id;
    //private SubParams subs;
}

查询:.../rest?id=123

现在我想用嵌套的类来构造参数对象。我如何才能做到这一点?

代码语言:javascript
复制
public class SubParams {
   private String name;
   //some more
}

理想情况下,我的查询应该是: Query:.../rest?id=123&name=test,并且“SubParams”字符串应该进入测试bean。

这有可能吗?

EN

回答 3

Stack Overflow用户

发布于 2015-09-01 17:04:48

如果需要设置为内部类,则必须注册Custom Covertor。更改如下:

代码语言:javascript
复制
@ResponseStatus(HttpStatus.OK)
@RequestMapping(value = "/rest", method = RequestMethod.GET)
public MyDTO getGiataHotel(@ModelAttribute("subParam") MyParams params, @Valid MyParams p) {
    //Do stuff
}

subParam表示有一个已注册进行转换的转换器。

代码语言:javascript
复制
public class MyParamsConverter implements Converter<String, MyParams> {

    @Override
    public MyParams convert(String name) {
        MyParams myParams = new MyParams();
        SubParams subParams = new SubParams();
        subParams.setName(name);
        myParams.setSubParams(subParams);
        return myParams;
    }

}
票数 1
EN

Stack Overflow用户

发布于 2015-09-01 16:47:06

您可以通过使用@ModelAttribute注释来实现这一点:http://docs.spring.io/spring/docs/3.1.x/spring-framework-reference/html/mvc.html#mvc-ann-modelattrib-method-args (这不在Path参数中,而是在get/post的requestParams中)

代码语言:javascript
复制
@RequestMapping(value="/owners/{ownerId}/pets/{petId}/edit", method =   RequestMethod.POST)
public String processSubmit(@ModelAttribute("pet") Pet pet, BindingResult result) {

     if (result.hasErrors()) {
         return "petForm";
     } 

     // ...       

}
票数 0
EN

Stack Overflow用户

发布于 2015-09-01 17:06:37

也许你应该使用RequestMethod.POST,如下所示

代码语言:javascript
复制
@RequestMapping(value = "/rest", method =   RequestMethod.POST)
public ModelAndView getGiataHotel(@ModelAttribute("subparams") SubParams subparams){
      SubParams sub=subparams;
      //do something...
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/32327179

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档