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