【发布时间】:2014-06-30 09:25:27
【问题描述】:
我有一个 Spring MVC 应用程序,它使用两个 REST 方法从服务器获取 Person,或允许某人远程注册。两种方法都接受JSON 并返回它。从JSON 到JSON 的转换在应用程序的DispatcherServlet 中处理。
这两种方法是:
// Gets a Person via REST.
@RequestMapping(value="/person/{personId}", method=RequestMethod.GET)
public @ResponseBody Person getPerson(@PathVariable("personId") String personId) {
logger.info(RestController.class.getName() + ".getPerson() method called.");
return personService.get(Integer.parseInt(personId));
}
// Allows a new Person to register via REST.
@RequestMapping(value="/register", method=RequestMethod.POST)
public @ResponseBody Person postRegister(@RequestBody Person person,
BindingResult bindingResult) {
logger.info(RestController.class.getName() + ".postRegister() method called.");
// Validate Person.
personValidator.validate(person, bindingResult);
if (bindingResult.hasErrors()) {
/* NOTE: Messages object to be returned here. */
List<ObjectError> errors = bindingResult.getAllErrors();
for (ObjectError error : errors) {
System.out.println(messageSource.getMessage(error.getCode(), null, null));
}
return person;
}
else {
personService.insert(person);
return person;
}
}
如果没有验证错误,这些都可以很好地工作。但在postRegister 方法中,如果出现验证错误,我想向客户端返回一个简单的Messages 对象,如下所示:
public class Messages {
private List<String> messages;
public Messages() {
messages = new ArrayList<String>();
}
然后可以将其转换为JSON。
所以我的问题变成了处理方法返回类型的问题。对于成功的操作,我希望每个方法都返回一个Person,但在失败的情况下,每个方法都应该返回一个Messages 对象。
除了让这两种方法都返回一个通用的Object 之外,有没有一种简单的方法可以做到这一点
可以实现?
【问题讨论】:
标签: rest spring-mvc parameters bean-validation