java - 如何在rest api的HTTP方法的请求和响应中应用Json序列化或反序列化

标签 java json rest serialization

我对 java 中的 Rest api 很陌生。我的问题是如何在 post 或 get 函数之前将 json 字符串请求直接转换为 java 类对象,比如

json string : '{"id":3,"name":name}'

rest api post 方法:

@Post
 public Something postData(Something obj) throws Exception {
} 

那么如何在请求此方法之前应用 json 序列化。 现在我在 postData 方法中转换它。

最佳答案

您可以使用 Jackson API 来处理 JSON。 对于以下 JSON 数据,Java 对象映射可以按如下方式完成。

    {
  "id": 123,
  "name": "Pankaj",
  "permanent": true,
  "address": {
    "street": "Albany Dr",
    "city": "San Jose",
    "zipcode": 95129
  },
  "phoneNumbers": [
    123456,
    987654
  ],
  "role": "Manager",
  "cities": [
    "Los Angeles",
    "New York"
  ],
  "properties": {
    "age": "29 years",
    "salary": "1000 USD"
  }
}

import java.io.File;
import java.io.IOException;
import java.io.StringWriter;
import java.nio.file.Files;
import java.nio.file.Paths;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;

import com.fasterxml.jackson.core.type.TypeReference;
import com.fasterxml.jackson.databind.JsonNode;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.SerializationFeature;
import com.fasterxml.jackson.databind.node.ObjectNode;
import com.journaldev.jackson.model.Address;
import com.journaldev.jackson.model.Employee;


public class JacksonObjectMapperExample {

    public static void main(String[] args) throws IOException {

        //read json file data to String
        byte[] jsonData = Files.readAllBytes(Paths.get("employee.txt"));

        //create ObjectMapper instance
        ObjectMapper objectMapper = new ObjectMapper();

        //convert json string to object
        Employee emp = objectMapper.readValue(jsonData, Employee.class);

        System.out.println("Employee Object\n"+emp);

        //convert Object to json string
        Employee emp1 = createEmployee();
        //configure Object mapper for pretty print
        objectMapper.configure(SerializationFeature.INDENT_OUTPUT, true);

        //writing to console, can write to any output stream such as file
        StringWriter stringEmp = new StringWriter();
        objectMapper.writeValue(stringEmp, emp1);
        System.out.println("Employee JSON is\n"+stringEmp);
    }

    public static Employee createEmployee() {

        Employee emp = new Employee();
        emp.setId(100);
        emp.setName("David");
        emp.setPermanent(false);
        emp.setPhoneNumbers(new long[] { 123456, 987654 });
        emp.setRole("Manager");

        Address add = new Address();
        add.setCity("Bangalore");
        add.setStreet("BTM 1st Stage");
        add.setZipcode(560100);
        emp.setAddress(add);

        List<String> cities = new ArrayList<String>();
        cities.add("Los Angeles");
        cities.add("New York");
        emp.setCities(cities);

        Map<String, String> props = new HashMap<String, String>();
        props.put("salary", "1000 Rs");
        props.put("age", "28 years");
        emp.setProperties(props);

        return emp;
    }

}

来源:http://www.journaldev.com/2324/jackson-json-processing-api-in-java-example-tutorial

关于java - 如何在rest api的HTTP方法的请求和响应中应用Json序列化或反序列化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37293683/

相关文章:

Java:使用GSON进行JSON映射

java - 条件 Bean 验证

javascript - Nagios JSON 查询返回不正确的值

php - 如何在 API 平台中创建自定义端点并将其添加到文档中?

angularjs - 无需用户身份验证(无凭据)的安全 REST API

java - 没有找到适合 jdbc mysql 的驱动程序

java - 在java中比较byte[i]和string

c# - 如何使 flutter 应用程序的 http 获取请求到本地主机?

java - 如何使用 Jackson AnnotationIntrospector 有条件地忽略属性

python - 在 Django Rest Framework 中使用无限滚动?