java—如何将json传递给spring而不序列化到对象?

h7wcgrx3  于 2021-07-03  发布在  Java
关注(0)|答案(2)|浏览(286)

我想将json数据从javascript传递到spring boot,并在响应中获取json。我看到的所有示例都需要将json数据转换(序列化?)为springbean,并直接使用它而不是json。这似乎是一个可怕的大量不必要的工作,并充满了潜在的错误。
有没有一种方法可以将json发送到spring控制器,控制器将json传递到存储库,在那里它提取查询所需的输入,执行查询,将结果作为json返回给控制器,控制器将json返回给javascript?
这似乎是一种逻辑简单的方法,可以让json在spring之间来回转换,而不必使用jackson或gson或其他方法来来回转换。如果这是可能的,有人能给我举个例子吗?

relj7zay

relj7zay1#

是的,这是可能的。以下是解决方案:
javascript代码:

var strategyObj = {name:"some-strategy-name",symbol:"SP-500"} //javascript object
var strategyStr = JSON.stringify(strategyObj);  //{"name":"some-strategy-name","symbol":"SP-500"}
var strategyUri = URI.encode(strategyStr); 
$.getJSON("http://localhost:8080/api/v1/backtest?strategy="+strategyUri, function(data) {
                console.log("returned returned data=", data);  //data is json
                strategy = data.parse();  //back to a javascript object

Spring启动控制器:

public class StrategyController {
    @Autowired
    private StrategyService strategyService;

    @GetMapping("/backtest")
    public Response backtestStrategy(@RequestParam String strategy) {
        Response response = strategyService.backtestStrategy(strategy);
        return response;
    }

Response class:

public class Response {
    public List<Quote> quotes;
    public Strategy strategy;

    public Response() {
        strategy = new Strategy();
    }
//no getters and setters needed
}

策略服务接口:

public interface StrategyService {
    Response backtestStrategy(String strategy);

StrategyServiceImpl:

    @Override
    public Response backtestStrategy(String strategy) {
        System.out.println("StrategyServiceImpl.backtestStrategy: strategy="+strategy);
        JSONObject jo = new JSONObject(strategy);
        String strategyName = jo.getString("name");
        String symbol = jo.getString("symbol");

    Response response = new Response();
//run backtest
response.value1 = "bla"
response.value2 = "etc"
return response;

有人可能会说这是错误的做法。我要让数据科学家来论证!

2lpgd968

2lpgd9682#

控制器的要点是将基础结构级别的关注点(http状态处理和json解析)与应用程序关注点(与存储库的交互)分开。
如果让存储库验证json是否正确,并获取正确的查询字段,那么您将很难维护代码,而且实际上更容易出现错误。

相关问题