JSON练习笔记和模板(关于第三方jar包 Jackson、乱码问题、时间戳问题、以及封装思想)

第三方jar包-Jackson

@Controller
@RequestMapping("json")
public class UserController {

    @RequestMapping("/json1")
    //思考:正常返回会走视图解析器,而json需要返回的是一个字符串
    //市面上有很多第三方的jar包可以实现这个功能,jackson,只要一个简单的注解就可以实现了
    //@ResponseBody,将服务端返回的对象转换为json对象响应回去;
    @ResponseBody
    public String json1() throws JsonProcessingException {

        System.out.println("xxxxxxxxx");
        //需要一个对象 jsckson对象映射器,就是一个类,使用它可以直接将对象转换为json字符串
        ObjectMapper mapper=new ObjectMapper();

        //创建一个对象
        User user=new User("小朱",3,"女");
        System.out.println(user);
        //将Java对象转换为接送字符串
        String str = mapper.writeValueAsString(user);
        System.out.println(str);

        return str;//由于使用了@ResponseBody注解,这里会将str以json格式的字符串返回,十分方便;
    }

JSON乱码问题,又两种方法

  • 方法一,在@RequestMapping里追加一个参数produces
@RequestMapping(value = "/json2",produces = "application/json;charset=utf-8")
@ResponseBody
public String json2() throws JsonProcessingException {


    User user=new User("小朱",3,"女");
    String str = new ObjectMapper().writeValueAsString(user);

    return str;//由于使用了@ResponseBody注解,这里会将str以json格式的字符串返回,十分方便;
}
  • 方法二,(一劳永逸),在springMVC.xml里设置
<!--注解驱动-->
<!--    <mvc:annotation-driven/>-->
    <mvc:annotation-driven>
<!--        json格式乱码处理方式-->
        <mvc:message-converters register-defaults="true">
            <bean class="org.springframework.http.converter.StringHttpMessageConverter">
                <constructor-arg value="UTF-8"/>
            </bean>
            <bean class="org.springframework.http.converter.json.MappingJackson2HttpMessageConverter">
                <property name="objectMapper">
                    <bean class="org.springframework.http.converter.json.Jackson2ObjectMapperFactoryBean">
                        <property name="failOnEmptyBeans" value="false"/>
                    </bean>
                </property>
            </bean>
        </mvc:message-converters>
    </mvc:annotation-driven>

时间戳

  • 当我的代码是这样时
@RequestMapping(value = "/json4")
@ResponseBody
public String json4() throws JsonProcessingException {

    Date date=new Date();
    System.out.println(date);
    //发现问题,时间默认返回的json字符串变成了时间戳的格式,
    String str = new ObjectMapper().writeValueAsString(date);

    return str;//由于使用了@ResponseBody注解,这里会将str以json格式的字符串返回,十分方便;
}

输出为
在这里插入图片描述

  • 我们将时间格式化,并把方法封装起来
  • Controller
@RequestMapping(value = "/json5")
@ResponseBody
public String json5() throws JsonProcessingException {



    //写一个日期对象
    Date date=new Date();

    return JsonUtils.getJson(date);
}
  • Jsonutils
public class JsonUtils {

    public static String getJson(Object object){
        return getJson(object,"yyyy-mm-dd HH:mm:ss");
    }

    public static String getJson(Object object,String dataFormat){
        ObjectMapper mapper=new ObjectMapper();
        //1.如果不返回时间戳,所以我们要关闭它的时间戳功能
        mapper.configure(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS,false);
        //2.时间格式化问题,自定日期格式对象
        SimpleDateFormat simpleDateFormat=new SimpleDateFormat(dataFormat);
        //3.让mapper指定时间日期格式为simpleDateFormat;
        mapper.setDateFormat(simpleDateFormat);

        try {
            return mapper.writeValueAsString(object);
        } catch (JsonProcessingException e) {
            e.printStackTrace();
        }
        return null;
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值