我有一个简单的@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,并且“SubParams”字符串应该进入测试bean。
这有可能吗?
发布于 2015-09-01 17:04:48
如果需要设置为内部类,则必须注册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;
}
}发布于 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中)
@RequestMapping(value="/owners/{ownerId}/pets/{petId}/edit", method = RequestMethod.POST)
public String processSubmit(@ModelAttribute("pet") Pet pet, BindingResult result) {
if (result.hasErrors()) {
return "petForm";
}
// ...
}发布于 2015-09-01 17:06:37
也许你应该使用RequestMethod.POST,如下所示
@RequestMapping(value = "/rest", method = RequestMethod.POST)
public ModelAndView getGiataHotel(@ModelAttribute("subparams") SubParams subparams){
SubParams sub=subparams;
//do something...
}https://stackoverflow.com/questions/32327179
复制相似问题