# RestMessage REST消息
MornBoot提供全局REST模型,用于系统内部/第三方系统进行交互。支持REST模型与第三方模型相互转换,从而屏蔽数据模型造成的交互障碍。
Since:v1.0.0
# 推荐配置
#开启国际化(默认)
morn.translator.enabled=true
#国际化资源文件
spring.messages.basename=morn/message
# Build Standard Message
使用RestBuilders
构建REST模型,响应JSON格式的消息。
# Default Success Message
构建一个success
消息
@RestController
@RequestMapping
public class LoginController {
@PostMapping("/login")
public RestMessage login() {
return RestBuilders.successMessage();
}
}
Response Body
{
"code": "success",
"data": null,
"level": "info",
"message": "操作成功",
"success": true
}
在morn/message.properties
中录入国际化信息
rest.success.message=操作成功
rest.failure.message=操作失败
rest.test.message=测试消息
# Custom Success Message
构建一个success
消息,并自定义消息内容
RestMessage restMessage = RestBuilders.successMessage("test");
Response Body
{
"code": "success",
"data": null,
"level": "info",
"message": "测试消息",
"success": true
}
# Complete Success Message
构建一个success
消息,并自定义所有内容
Map<Object, Object> data = new HashMap<>();
data.put("Foo", "Foo value");
data.put("Bar", "Bar value");
RestMessage restMessage = RestBuilders.infoBuilder().code("test").level(Level.WARNING)
.message("This is test message.").data(data).build();
Response Body
{
"code": "test",
"data": {
"Bar": "Bar value",
"Foo": "Foo value"
},
"level": "warning",
"message": "This is test message.",
"success": true
}
# Data Success Message
构建一个success
消息,并携带数据
Object data = new Object();
RestMessage restMessage = RestBuilders.successMessage(data);
Response Body
{
"code": "success",
"data": {},
"level": "info",
"message": "操作成功",
"success": true
}
# Default Failure Message
RestMessage restMessage = RestBuilders.failureMessage();
# 消息转换
# 模拟三方交互
/**
* 百度REST消息
*/
@Getter
@Setter
@ToString
public class BaiduMessage {
/**
* 状态码
*/
private String error;
/**
* 消息内容
*/
private String msg;
}
# 百度消息转为Morn消息
BaiduMessage baiduMessage = new BaiduMessage();
baiduMessage.setError("0");
baiduMessage.setMsg("操作成功");
RestMessage restMessage = RestBuilder.from(baiduMessage);
// success=true, code=0, level=null, message=操作成功, data=null
# Morn消息转为百度消息
BaiduMessage baiduMessage = RestBuilders.successBuilder().to(BaiduMessage.class);
// error=0, msg=操作成功
# 创建消息转换器
消息转换工作在转换器中完成,这从根本上杜绝了与第三方系统交互时,极易产生的不健康代码。
开发人员不需要关心第三方系统的数据模型,使用标准REST模型,完成业务开发即可。
/**
* 百度REST消息
*/
@Getter
@Setter
@ToString
public class BaiduMessage {
/**
* 状态码
*/
private String error;
/**
* 消息内容
*/
private String msg;
}
/**
* 百度消息转换器
*/
@Target(BaiduMessage.class)
public class BaiduConverter implements RestConverter<BaiduMessage> {
@Override
public BaiduMessage convert(RestMessage restMessage) {
BaiduMessage baiduMessage = new BaiduMessage();
baiduMessage.setError(restMessage.isSuccess() ? "0" : "-1");
baiduMessage.setMsg(restMessage.getMessage());
return baiduMessage;
}
@Override
public RestMessage revert(BaiduMessage baiduMessage) {
RestMessage restMessage = new SimpleRestMessage();
boolean success = isSuccess(baiduMessage);
restMessage.setSuccess(success);
restMessage.setLevel(success ? Level.INFO : Level.ERROR);
restMessage.setCode(baiduMessage.getError());
restMessage.setMessage(baiduMessage.getMsg());
return restMessage;
}
private boolean isSuccess(BaiduMessage baiduMessage) {
return Objects.equals(baiduMessage.getError(), "0");
}
}