【问题标题】:JSON Post Response from JSON Post Request来自 JSON 发布请求的 JSON 发布响应
【发布时间】:2017-07-24 08:44:39
【问题描述】:

我创建了一个 REST 网络服务,它给了我 “获取 JSON 响应”为:

 {
        "payload": {
            "RFID": "E2005180040F003122202E5F",
            "chassisNumber": "4654689761",
            "vehicleNumber": "TN 01 1991"
        },
        "success": "true"
    }

现在我想从下面的帖子请求中发布回复:

Vehicle tag Request
{
  "vehicle_no": "TN07B0054"
 }

我已经创建了 post 方法,但它把整个事情作为参数。

如何仅从车辆标签请求中将车辆参数设为“TN07B0054”。

下面是我给出上述车辆标签请求时的POST 响应:

{
    "payload": {
        "vehicleNumber": "\"vehicle_no\": \"TN 07 B 0054\""
    },
    "success": "false"
}

【问题讨论】:

    标签: java json rest post


    【解决方案1】:

    您可以创建一个名为VehicleTagRequest

    的实体
    public class VehicleTagRequest {
        private String vehicle_no;
    
        public String getVehicle_no() {
            return vehicle_no;
        }
    
        public void setVehicle_no(String vehicle_no) {
            this.vehicle_no = vehicle_no;
        }
    }
    

    将字符串反序列化为上述 java 对象的最简单方法是使用 Jackson 库 (https://github.com/FasterXML/jackson)

    如果你是 Maven 进行依赖管理,你可以在 pom.xml 中添加如下依赖(如果你在本地维护依赖,则不需要此步骤)

            <dependency>
                <groupId>com.fasterxml.jackson.core</groupId>
                <artifactId>jackson-databind</artifactId>
                <version>2.9.0.pr4</version>
            </dependency>
    

    现在来反序列化您的车辆标签请求 json

    如果你不使用注解,使用 Jackson 的反序列化是使用 ObjectMapper API 完成的, 我在下面附上了一个示例代码 sn-p-

    public class VehicleSerialisation {
    
        public static void main(String[] args) {
            String vehicle = "{\"vehicle_no\": \"TN07B0054\"}";
    
            ObjectMapper objectMapper = new ObjectMapper();
            VehicleTagRequest vehicleTagRequest = null;
            try {
                vehicleTagRequest = objectMapper.readValue(vehicle, VehicleTagRequest.class);
            } catch (IOException e) {
                e.printStackTrace();
            }
            System.out.print(vehicleTagRequest.getVehicle_no());
        }
    }
    

    然后您可以使用vehicleTagRequest.getVehicle_no() 来形成您的GET JSON 响应请求

    【讨论】:

    【解决方案2】:

    这是无效的 Json

    {
        "payload": {
            "vehicleNumber": "\"vehicle_no\": \"TN 07 B 0054\""
        },
        "success": "false"
    }
    

    没有转义字符

    {
        "payload": {
            "vehicleNumber": "vehicle_no": "TN 07 B 0054"
        },
        "success": "false"
    }
    

    你可以这样使用

    {
            "payload": {
                "vehicleNumber": {
              "vehicle_no": "TN 07 B 0054"
                  }
            },
            "success": "false"
        }
    

    你的 POJO 应该是这样的

    public class MyPojo
    {
        private Payload payload;
    
        private String success;
    
        public Payload getPayload ()
        {
            return payload;
        }
    
        public void setPayload (Payload payload)
        {
            this.payload = payload;
        }
    
        public String getSuccess ()
        {
            return success;
        }
    
        public void setSuccess (String success)
        {
            this.success = success;
        }
    
        @Override
        public String toString()
        {
            return "ClassPojo [payload = "+payload+", success = "+success+"]";
        }
    }
    

    【讨论】:

      猜你喜欢
      • 2014-12-08
      • 2014-09-17
      • 2020-12-11
      • 1970-01-01
      • 2017-11-13
      • 2020-09-03
      • 1970-01-01
      • 1970-01-01
      • 2016-06-27
      相关资源
      最近更新 更多