我有一个简单的@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”字符串应该进入 SubParams
bean。
这可能吗?
最佳答案
如果你需要设置为内部类,你必须注册一个Custom Covertor。更改如下:
@ResponseStatus(HttpStatus.OK)
@RequestMapping(value = "/rest", method = RequestMethod.GET)
public MyDTO getGiataHotel(@ModelAttribute("subParam") MyParams params, @Valid MyParams p) {
//Do stuff
}
subParam 表示有一个转换器注册用于转换。
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;
}
}
关于java - 如何在 spring-rest 中嵌套@PathVariable?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32327179/