后端使用json格式将数据返回给前端的三种方式的实现
文章目录使用jackson类库使用springmvc的@RestController注解使用fastjson实现使用jackson类库1.引jar包<!-- json --><dependency><groupId>com.fasterxml.jackson.core</groupId><arti...
·
使用jackson类库
1.引jar包
<!-- json -->
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-annotations</artifactId>
<version>${jackson.version}</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-core</artifactId>
<version>${jackson.version}</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>${jackson.version}</version>
</dependency>
2.写一个将object转json,并通过response对象将json格式的数据返回给前端的方法
public class BaseController{
protected static JsonFactory factory = mapper.getJsonFactory();
/**将对象转成json输出**/
protected void writeJSON(Object obj) throws IOException {
response.setContentType("text/html;charset=utf-8");
JsonGenerator responseJsonGenerator = factory.createJsonGenerator(response.getOutputStream(), JsonEncoding.UTF8);
responseJsonGenerator.writeObject(obj);
}
3.后端调用与前端的接收
public class Result implements Serializable{
private static final long serialVersionUID = 2267751680865696851L;
/**是否成功**/
private Boolean success = false ;
/**返回消息**/
private String message;
/**返回数据**/
private Object data;
//省略getter和setter方法
}
@Controller
@RequestMapping("/sysuser")
public class SysUserController extends BaseController{
@RequestMapping(value = "/login", method = { RequestMethod.POST, RequestMethod.GET })
public void login() throws IOException{
Result result=new Result();
result.setMessage("登录成功");
result.setSuccess(true);
super.writeJSON(result);
}
}
submitHandler:function(form){
$.ajax({
dataType : "json",
url : "sysuser/login.action",
type : "post",
data : $("#login_form").serialize(),
success : function(data) {
$.alert(data.message);
if(data.success){
//--------------------------------------------data.success
window.location.href = 'page/main.action';
}
},
error : function (e){
var d = e.responseJSON;
if(d){
$.alert(d.message);
}
}
});
return false; //阻止form提交
}
使用springmvc的@RestController注解
public class Result {
private static final int SUCCESS = 200;
private static final int FAILED = 500;
private int code;
private String message;
private Object data;
public Result(int code, String message, Object data) {
this.code = code;
this.message = message;
this.data = data;
}
public static Result ok(Object data) {
return new Result(SUCCESS, "success", data);
}
@RestController
@RequestMapping("/order")
public class SysOrderController {
@RequestMapping("/login")
public Result login() {
Result result=new Result();
result.setMessage("登录成功");
result.setSuccess(true);
Map<String,String>map=new hashMap<>();
map.put("content","i am content")
return Result.ok(map);
}
}
/**
*@RestController是@ResponseBody和@Controller的组合注解
@Controller是用来响应页面的,如果是string类型的方法,则springmvc会跳转到相应的页面(视图)
@ResponseBody是用来响应数据的,如果是对象类型的方法,则springmvc会将结果对象转成json格式输出给前端
本例中我使用的是@RestController注解,所以springmvc会将返回的对象Result自动转json返回给前端(底层默认是使用jsckson来实现数据格式转换的)
*/
/**
*public Result add(@RequestBody WegoUser user){} @@RequestBody是将前端传来的json数据转对象。默认不用加(springmvc会自动完成数据的封装)
*/
使用fastjson实现
添加依赖:
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>1.2.58</version>
</dependency>
@Controller
@RequestMapping("/login")
public class TestController {
@RequestMapping("/test")
public void test(HttpServletResponse response) throws IOException {
SysUser sysUser=new SysUser();
sysUser.setLoginPass("123456");
sysUser.setLoginAccount("小明");
System.out.println("dskfjdsfssdfdsfklkdfdsf");
JSONObject jsonObject= (JSONObject) JSONObject.toJSON(sysUser);
Map<String,String>map=new HashMap<>();
map.put("phone","1223456");
map.put("status","ok");
jsonObject.put("info",map);
response.setContentType("text/html;charset=utf-8");
response.getWriter().write(jsonObject.toJSONString());
}
}
//结果如下:
//{"loginAccount":"小明","roles":[],"loginPass":"123456","info":{"phone":"1223456","status":"ok"}}
开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!
更多推荐
已为社区贡献1条内容
所有评论(0)