创建自定义类
根据项目需要定义成员变量
public class AkResponse implements Serializable {
private String msg;
private String code;
private Object data;
private Boolean succ;
public static AkResponse genSucc(Object data) {
AkResponse a = new AkResponse();
a.setSucc(true);
a.setCode("1");
a.setMsg("success");
a.setData(data);
return a;
}
public static AkResponse genFail(Exception e) {
AkResponse a = new AkResponse();
a.setSucc(false);
a.setMsg(e.getMessage());
a.setCode("0");
return a;
}
//getter,setter
}
创建自定义的converter
public class AkResponseConverter extends AbstractHttpMessageConverter<AkResponse> {
/**字符编码utf-8*/
public final static Charset UTF8 = Charset.forName("UTF-8");
private Charset charset = UTF8;
public AkResponseConverter() {
super(new MediaType("application", "json", UTF8), new MediaType("application", "*+json", UTF8));
}
/**判断是否是支持的类型*/
@Override
protected boolean supports(Class<?> clazz) {
if (clazz.equals(AkResponse.class)) {
return true;
}
return false;
}
@Override
protected AkResponse readInternal(Class<? extends AkResponse> clazz, HttpInputMessage inputMessage)
throws IOException, HttpMessageNotReadableException {
//没有处理用户的发送过来的请求
return null;
}
@Override
protected void writeInternal(AkResponse obj, HttpOutputMessage outputMessage) throws IOException,
HttpMessageNotWritableException {
OutputStream out = outputMessage.getBody();
String text = null;
if (null != obj) {
//将obj转为json字符串
text = JSONObject.fromObject(obj).toString();
byte[] bytes = text.getBytes(charset);
//输出到out
out.write(bytes);
}
}
}
在spring-mvc.xml中对自定义的converter进行设置
<mvc:annotation-driven>
<mvc:message-converters>
.......
<bean class="cn.akioyuan.core.converter.AkResponseConverter" />
</mvc:message-converters>
</mvc:annotation-driven>
在Controller中返回自定义类型
必须添加@ResponseBody注解
@Controller
@RequestMapping(value = "/member")
public class MemberController extends BaseController {
......
@RequestMapping(value = "/all")
@ResponseBody
public AkResponse all() {
try {
Map<String, List<CourseDto>> map = courseService.listAll();
return AkResponse.genSucc(map);
} catch (Exception e) {
return AkResponse.genFail(e);
}
}
......
}
服务器返回的数据
{"code":"1","data":{......},"msg":"success","succ":true}
页面处理返回值
<script>
$.ajax({
url : '.....',
dataType : 'json',
type : 'POST',
beforeSend : function() {
......
},
success : function(data) {
if (data.succ) {
data = data.data;
$.each(data,function(i, v) {
console.log(i + '->' + v);
......
});
.......
}
},
error : function() {
}
});
</script>
小结
感觉比在Controller中直接返回JSONObject要高大上那么一点点。