【问题标题】:How to POST a Java POJO / Json to a Play Framework v2.2.1 Controller Http POST Method如何将 Java POJO / Json 发布到 Play Framework v2.2.1 控制器 Http POST 方法
【发布时间】:2020-12-11 12:45:22
【问题描述】:

我正在使用 Java 播放框架编写 API。 在测试 Play 控制器时,我想通过 Postman 等休息客户端发布 Json。

Java Play 版本 = 2.2.1

控制器方法:

public static Result submitDetails(DetailsVO detailsVO) throws Exception

路线配置

POST    /submit                     controllers.application.ProcessDetails.submitDetails(detailsVO:DetailsVO)

下面是我的 POJO

import java.io.Serializable;
import java.util.List;

public class DetailsVO implements Serializable {
    public DetailsVO(){}

    private String firstName;
    private String middleName;

    private List<Details> detailsList;

//Setter and getter for first name and last name

public List<Details> getDetailsList() {
        return detailsList;
    }

    public void setDetailsList(List<Details> detailsList) {
        this.detailsList = detailsList;
    }

}

添加路由条目后,我收到此错误“无法解析引用”

请问,能否就如何定义一个在路由中采用 Java POJO 的 post 方法提供一些建议?

【问题讨论】:

    标签: java scala rest playframework


    【解决方案1】:

    我认为不可能直接在 Java 中使用您的 VO。您需要使用播放请求类型。然后从请求中获得 JSON 格式的正文。您可以为此使用任何 JSON 解析器。 Play 有一个,但你可以使用任何你喜欢的东西。您的路线如下所示:

    POST    /submit                     @controllers.HomeController.submitDetails(request: Request)
    

    从你的控制器函数中删除静态,让它接受 Http.Request 而不是 VO。

    public Result submitDetails(Http.Request request) throws Exception {
        ObjectMapper objectMapper = new ObjectMapper();
        JsonNode json = request.body().asJson();
        DetailsVO dvo = objectMapper.convertValue(json, DetailsVO.class);
        return ok(json.toString());
    }
    

    对于这个例子,我使用了 Jackson JSON 解析器。要使此特定解决方案起作用,您还需要公开字段,因为解析器不适用于私有字段。我建议使用他们网站上的播放文档。可以在这里找到:https://www.playframework.com/documentation/2.8.x/JavaHome 我建议您在尝试 play 框架时尝试 scala,它使该框架的代码更加简洁。

    【讨论】:

    • Thanks both.Using play v2.2.1 (1)'request: Request'在路由文件中没有解析,导致编译错误,但是JsonNode jsonRequest = request().body().asJson( );作品(2)DetailsVO dvo = objectMapper.convertValue(json, DetailsVO.class);不工作。返回 200k,带有 HTML 响应,即使在强制 json 响应之后,即 ObjectNode result = Json.newObject();返回 ok(Json.toJson(result)).as("application/json") (3) playframework.com/documentation/2.2.x/JavaJsonRequests,从链接出现 ObjectMapper 在 v2.2.1 中不起作用。手动映射不是我的偏好,而是 ao ?
    • 除非您更新到更新版本的播放框架,否则我无能为力。虽然我认为只返回包装在结果中的 JsonNode 会返回 json 格式。 ObjectMapper 不是专门用来玩的,它应该也可以在 1.8 以下版本的 java 中使用。
    猜你喜欢
    • 1970-01-01
    • 2016-09-15
    • 1970-01-01
    • 2015-09-08
    • 1970-01-01
    • 2019-04-12
    • 2016-05-28
    • 2012-01-25
    • 2016-07-05
    相关资源
    最近更新 更多