将RequestBody json转换为Object - Spring Boot

时间:2017-03-30 06:09:11

标签: java php json spring spring-boot

我是java开发的初学者,但他之前有过PHP和Python等编程语言的经验。所以很少有人对如何使用开发进行弹簧启动感到困惑。

我正在开发一个具有以下请求的rest API

{
  "key":"value",
  "key1":"value1",
  "platform_settings":[
      {"key":"value"}
  ]
}

我做了什么

我创建了一个RestController,它接受http请求并为资源

创建了一个函数
public Share share(@RequestBody final Share share) { 
        LOGGER.debug("This is the request", share);
        return share; //
}

问题1:如果它是任何其他编程语言,如PHP或Python,将会有一个辅助函数,它将接受json请求并将其转换为我可以轻松处理的对象。

在python中它就像

一样简单
import json
import requests

response = requests.get(...)
json_data = json.loads(response.text)
//can work on json_data anyway I want.

但在java中,我将不得不创建一个POJO类,或者将jackson / JPA实体作为依赖项,将请求映射到一个类(我应该预先定义请求)。

有没有更好的方法可以做到这一点?对于我提出的每个请求,我都必须创建一个可以映射到请求的类,我将不得不定义类

Entity

package com.payunow.socialsharemodule.models;

import java.util.Map;

import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;


import javax.persistence.Id;


@Entity
public class Share {

    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    private Long id;

    private String key;
    private String key1;
    private Map<String,String> platform_settings;

    public Share(String name, String description,Map<String,String> platform_settings) {
        this.key = key;
        this.key1 = key1;
        this.platform_settings = platform_settings;
    }

    //for JPA
    public Share() {}

    public String getKey() {
        return key;
    }

    public String getKey1() {
        return key1;
    }

    public Map<String,String> getPlatform_settings() {
        return platform_settings;
    }

}

对于我发出的每个请求,我都必须创建一个定义其内部变量的类。这是唯一的方法吗?

2 个答案:

答案 0 :(得分:6)

你需要杰克逊依赖于将json转换为java对象。但是Spring默认提供它,所以你不必明确地添加它。

您不需要JPA实体。仅当您要将收到的数据存储到数据库中时才需要这样做 只是为了接受请求,您不必创建单独的pojo类。看看这段代码

myApp.controller('DemoController2', ['$scope', '$rootScope', function DemoController($scope,$rootScope) {
   var fullName =  $rootScope.currUser.fullName;
}])

正如您在此处所见,它将字符串作为请求并将其转换为通用JSONObject。所以基本上你可以将任何json传递给这个端点。

答案 1 :(得分:0)

您可以使用ObjectMapper类,它具有诸如convertValue和realValue之类的方法。