后端使用json格式将数据返回给前端的三种方式的实现

博客介绍了三种实现将数据以JSON格式返回给前端的方法。一是使用jackson类库,需引入jar包、编写转换方法并进行后端调用与前端接收;二是使用springmvc的@RestController注解;三是使用fastjson实现,要添加依赖。

使用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"}}
后端开发中,将 `List` 类型的数据结构转换为 JSON 格式返回前端是常见的需求。通常,后端会将从数据库或其他数据源获取的 `List` 数据(如用户列表、商品列表等)序列化为 JSON 字符串,并通过 HTTP 响应返回前端进行解析和展示。 以下是几种主流后端语言及框架中如何将 `List` 转换为 JSON方式: ### Java(使用 Jackson 或 Fastjson) #### 使用 Jackson 库 Jackson 是 Java 中广泛使用JSON 处理库,支持自动将对象或集合转换为 JSON。 ```java import com.fasterxml.jackson.databind.ObjectMapper; ObjectMapper objectMapper = new ObjectMapper(); List<User> userList = getUserList(); // 获取 List 数据 String jsonStr = objectMapper.writeValueAsString(userList); ``` 该方法可以将包含多个对象的 `List` 直接转换为标准的 JSON 数组格式[^2]。 #### 使用 Fastjson(阿里巴巴开源) Fastjson 是另一个流行的 JSON 解析库,提供了更简洁的 API。 ```java import com.alibaba.fastjson.JSON; List<User> userList = getUserList(); String jsonStr = JSON.toJSONString(userList); ``` 这种方式适用于需要快速将复杂结构(如嵌套对象或树形结构)转换为 JSON 的场景[^3]。 ### PHP PHP 提供了内置函数 `json_encode()` 来将数组或对象转换为 JSON 字符串。 ```php $data = [ ['id' => 1, 'name' => 'Alice'], ['id' => 2, 'name' => 'Bob'] ]; echo json_encode($data); ``` 此方法适用于从数据库查询结果中获取的二维数组,可以直接转换为前端可解析的 JSON 数组格式[^2]。 ### Python(Flask/Django) #### Flask 示例 Flask 框架中可以使用 `jsonify` 函数直接返回 JSON 响应。 ```python from flask import jsonify @app.route('/users') def get_users(): users = [{'id': 1, 'name': 'Alice'}, {'id': 2, 'name': 'Bob'}] return jsonify(users) ``` #### Django 示例 Django 中可以通过 `JsonResponse` 返回 JSON 数据。 ```python from django.http import JsonResponse def user_list(request): data = list(User.objects.values()) # 查询所有用户并转为字典列表 return JsonResponse(data, safe=False) ``` 这两种方式都支持将数据库查询结果转换为 JSON返回前端[^5]。 ### Node.js(Express) Express 框架中可以直接使用 `res.json()` 方法返回 JSON 数据。 ```javascript app.get('/users', (req, res) => { const users = [{ id: 1, name: 'Alice' }, { id: 2, name: 'Bob' }]; res.json(users); }); ``` 这种写法简洁且高效,适合构建 RESTful API 接口。 ---
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值