springMVC返回json字符串

springMVC返回json字符串

需要导入的依赖包

<dependency>
    <groupId>org.projectlombok</groupId>
    <artifactId>lombok</artifactId>
    <version>1.18.20</version>
</dependency>
<dependency>
    <groupId>com.fasterxml.jackson.core</groupId>
    <artifactId>jackson-databind</artifactId>
    <version>2.9.8</version>
</dependency>
<dependency>
    <groupId>org.aspectj</groupId>
    <artifactId>aspectjweaver</artifactId>
    <version>1.9.2</version>
</dependency>

1、使用jackson依赖包

主要思想是使用jackson包下的ObjectMapper类中的writeValueAsString()方法,将java对象转成json字符串

创建一个实体类

@Data
@AllArgsConstructor
@NoArgsConstructor
这三个注释器的作用是自动为实体类创建有/无参构造方法以及getter/setter

package com.luciano.pojo;

import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;

@Data
@AllArgsConstructor
@NoArgsConstructor
public class User {
    private String name;
    private int age;
    private String sex;
}

创建一个controller

两个很重要的注释器:

**@RestControlle **:该注释器作用在类上,且类下的所有方法只能返回json字符串,不会返回视图

**@ResponseBody **:使用该注释器作用在方法上,且该方法只能返回json字符串,不能返回视图

方法中必须抛出JsonProcessingException

将java对象转成json字符串需要经过的步骤:

  • 1、获取需要转换的java对象
  • 2、取ObjectMapper对象
  • 3、使用ObjectMapper对象中的writeValueAsString(Object)方法将java对象进行转换
  • 4、返回转换后的字符串
import com.luciano.pojo.User;
import com.luciano.utils.JsonUtils;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.bind.annotation.RestController;

import javax.xml.crypto.Data;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;

@RestController
public class UserController {
    @RequestMapping("j1")
    public String json1() throws JsonProcessingException {
        User user = new User("lucinao", 23, "man");
        ObjectMapper mapper = new ObjectMapper();
        String str = mapper.writeValueAsString(user);
        return str; //{"name":"xxx","age":xx,"sex":"xx"}
    }
}

通常在实际开发过程中为了提高代码复用性降低冗余,会创建一个Json工具类

package com.luciano.utils;

import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.SerializationFeature;
import com.fasterxml.jackson.databind.util.ObjectBuffer;
import netscape.javascript.JSException;

import java.text.SimpleDateFormat;

public class JsonUtils {
    public static String serializer(Object object) throws JsonProcessingException {
        //传入一个java对象 ,返回json字符串
        ObjectMapper objectMapper = new ObjectMapper();
        String json = objectMapper.writeValueAsString(object);
        return json;
    }

    //传入时间对象,传入要输出的格式。返回json字符串
    public static String serializerDate(Object object, String dateFormat) throws JsonProcessingException {
        SimpleDateFormat simpleDateFormat = new SimpleDateFormat(dateFormat);
        ObjectMapper objectMapper = new ObjectMapper();
        //mapper层面关闭生成时间戳
        objectMapper.configure(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS, false);
        objectMapper.setDateFormat(simpleDateFormat);
        String str = objectMapper.writeValueAsString(object);
        return str;
    }

    //方法重载  传入参数默认值
    public static String serializerDate(Object object) throws JsonProcessingException {
        return JsonUtils.serializerDate(object, "yyyy-MM-dd HH:mm:ss");
    }

}

我们可以直接调用上面的工具类

package com.luciano.controller;

import com.alibaba.fastjson.JSON;
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.SerializationFeature;
import com.luciano.pojo.User;
import com.luciano.utils.JsonUtils;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.bind.annotation.RestController;
import javax.xml.crypto.Data;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;

@Controller 
public class UserController {
	@RequestMapping("j4")
    @ResponseBody
    public String json4() throws JsonProcessingException {
        User user = new User("lucinao", 23, "man");
        String str = JsonUtils.serializer(user); // 使用自定义工具类
        return str; //{"name":"xxx","age":xx,"sex":"xx"}
    }

    @RequestMapping("j5")
    @ResponseBody
    public String json5() throws JsonProcessingException {
        Date date = new Date();
        String str = JsonUtils.serializerDate(date); // 使用自定义工具类
        return str; //{"name":"xxx","age":xx,"sex":"xx"}
    }

    @RequestMapping("j6")
    @ResponseBody
    public String json6() throws JsonProcessingException {
        User user = new User("lucinao", 23, "man");
        User user2 = new User("lucinao", 23, "man");
        User user3 = new User("lucinao", 23, "man");
        List<User> userList = new ArrayList<User>();
        userList.add(user);
        userList.add(user2);
        userList.add(user3);
        String str = JSON.toJSONString(userList); //使用alibaba fastjson生成json
        return str;
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值