Java 如何在spring rest中嵌套@PathVariable?

Java 如何在spring rest中嵌套@PathVariable?,java,spring,rest,spring-restcontroller,Java,Spring,Rest,Spring Restcontroller,我有一个简单的@RestController服务,它接受查询参数,spring自动将它们解析为bean: @ResponseStatus(HttpStatus.OK) @RequestMapping(value = "/rest", method = RequestMethod.GET) public MyDTO getGiataHotel(@Valid MyParams p) { Sysout(p.getId()); //prints "123" } public class MyP

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

@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

现在我想用嵌套类构造参数对象。我怎样才能做到这一点

public class SubParams {
   private String name;
   //some more
}
理想情况下,我的查询应该是:query:
../rest?id=123&name=test
,并且“test”字符串应该放在
子参数中


这可能吗?

您可以通过使用@modeldattribute注释来实现这一点:(这不在路径参数中,而是在requestParams get/post中)


如果需要设置为内部类,则必须注册自定义Covertor。变化如下:

@ResponseStatus(HttpStatus.OK)
@RequestMapping(value = "/rest", method = RequestMethod.GET)
public MyDTO getGiataHotel(@ModelAttribute("subParam") MyParams params, @Valid MyParams p) {
    //Do stuff
}
子参数表示存在注册用于转换的转换器

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;
    }

}
公共类MyParamsConverter实现转换器{
@凌驾
公共MyParams转换(字符串名称){
MyParams MyParams=新的MyParams();
SubParams SubParams=新的子参数();
子参数setName(名称);
myParams.setSubParams(子参数);
返回myParams;
}
}

也许你应该使用
RequestMethod.POST
,像这样

@RequestMapping(value = "/rest", method =   RequestMethod.POST)
public ModelAndView getGiataHotel(@ModelAttribute("subparams") SubParams subparams){
      SubParams sub=subparams;
      //do something...
}

test
是一个值。参数名为
name
。因此,您的子参数有一个字段
名称
?正如您上面看到的,是的,类
子参数
有一个字段
名称
。子参数是静态的吗?现在不是,但如果这样有帮助的话,它可能是静态的。这将非常有帮助,因为要实例化内部类,必须有对外部实例的引用。嵌套类可以安全地提取到它自己的文件中。但两者之间是否存在依赖关系?我仍然不明白你的目的和限制是什么,但我想使用
GET
查询,而不是帖子!
@RequestMapping(value = "/rest", method =   RequestMethod.POST)
public ModelAndView getGiataHotel(@ModelAttribute("subparams") SubParams subparams){
      SubParams sub=subparams;
      //do something...
}