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;
}
}