仅出于示例的目的,假设我想创建一个 REST 端点,它返回当天的消息 (motd)。传入参数是数字表示的日期,结果是包含日期和消息的 JSON。
public class Motd {
int day;
String message;
...
}
这被翻译成...
{
"day": 1,
"message": "whatever you want to say here"
}
...并由以下代码返回:
@RequestMapping(value = "/motd", method = RequestMethod.GET, produces = MediaType.APPLICATION_JSON_VALUE)
@ResponseBody
public ResponseEntity<Motd> getMotd(@RequestParam(value = "day") int day {
...
return new ResponseEntity<Motd>(motd, HttpStatus.OK);
}
只要一切正常,它就可以正常工作,但我的目的是返回一个 http 状态代码和一个 JSON,解释可能发生的任何错误的原因:
...
if( day > 365 ) {
Status error = new Status( "failed", "can't go beyond 365 days" );
return new ResponseEntity<Status>(error, HttpStatus.BAD_REQUEST);
}
...
但这与ResponseEntity<Motd>
前面定义的冲突。到目前为止,我知道的唯一解决方案是自己定义ResponseEntity<String>
和序列化 JSON。是否有任何替代方案/更优雅的替代方案允许 Spring 返回“变化”类?
我的问题的重点不是错误处理,例如,我展示了一些基于异常的聪明方法。如果可能的话,我想避免从一个公共基类派生所有可能的返回类。
我的代码基于 Spring Boot 1.3 RC1。