java - 根据 Flask 请求自动将 JSON 转换为对象

标签 java python json spring-mvc flask

在 Spring MVC + Jackson (Java) 中,我可以这样:

我的对象(Java)

public class Project {

   private long id;
   private String self;
   private String key;
   private String name;

   //Getters and Setters
}

Spring MVC Controller

...
@RequestMapping(value="/doSomething", method=RequestMethod.POST)
public String doSomething(@RequestBody Project project) {
    System.out.println(project.getName());
    return "myPage";
}
...

然后,我可以发送一个像这样的 json:

{"id": "exampleId", "name": "exampleName","self": "url","key": "key"}

它会自动转换为我的对象。在 Python 上,我有我的对象类。 Flask 中有一些我可以调用的东西:

flask Controller

@app.route('/doSomething', methods=['POST'])
def do_something(project):
    print project.name
    return "myPage"

我的对象(Python)

class Project():

    id=None        
    name=None
    url=None
    key=None

本质上,我想在 Flask 上接收我的 JSON 并且已经转换为我的对象。我想避免这样做:

class Project(object):
  def __init__(self, id, url, name, key):
    self.id = id
    self.url = url
    self.name = name
    self.key = key
...
import json
my_json = json.loads(request.data)
user = Project(**j)

这样,我将不得不从我的所有对象中覆盖 init。或者这样:

project = json.loads('{"__type__": "Project", "name": "project", "key": "key"}')
print project['name']
print project['key']

也不好,因为它不是我的对象,它是命令。

这可能吗?或者我必须选择其中之一?

最佳答案

据我所知,如果您必须在 Python 中使用类,我认为您无法避免添加构造函数。

另一种选择是使用 namedtuple .它们类似于元组,但具有字段名称。无论哪种方式,您都可以使用装饰器模拟您想要的东西

例如:

from collections import namedtuple
Project = namedtuple('Project', 'id url name key')

现在您可以在 View 处理程序中执行类似的操作:

# This decorator takes the class/namedtuple to convert any JSON
# data in incoming request to. 
def convert_input_to(class_):
    def wrap(f):
        def decorator(*args):
            obj = class_(**request.get_json())
            return f(obj)
        return decorator
    return wrap

@app.route('/doSomething', methods=['POST'])
@convert_input_to(Project)
def do_something(project):
    print project.name
    return "myPage"

另见 flask.Request.get_json并确保 'Content-Type' 设置为 'application/json'

关于java - 根据 Flask 请求自动将 JSON 转换为对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30717754/

相关文章:

java - Spring MVC Apache 服务器集成

java -\s+ 不匹配所有空格?

python - Antlr4 在 RaspberryPi 上运行缓慢

javascript - Jasmine 无法读取有效的 json 文件

javascript - 数据绑定(bind)在 XML View 中不起作用

java - 如何注释自定义 Spring Boot 自定义存储库?

java - 如何将 ViewFlipper 中的计时器重置回 0

python - Django-registration:如何允许用户删除他们的帐户?

Python BeautifulSoup 替换 img src

json - 如何检查来自 Ansible URI 调用的 json 响应