当前位置: 首页 > 知识库问答 >
问题:

我如何在thymeleaf页面中显示我的api所有json响应数据?

须巴英
2023-03-14

第一件事:我想从API读取json数据,并想在我的Tymeleaf模板页面中显示。以下是我的代码:

我的JSON类:

package com.mslapiagent.entity;
import java.math.BigInteger;

import javax.persistence.Entity;

public class MSLApiAgent{
    private int id;
    private BigInteger tranId;
    private String clientTranId;
    private String msisdn;
    private String msgbody;

    public MSLApiAgent() {
    }
    public MSLApiAgent(int id, BigInteger tranId, String clientTranId, String msisdn, String msgbody) {
        this.id = id;
        this.tranId = tranId;
        this.clientTranId = clientTranId;
        this.msisdn = msisdn;
        this.msgbody = msgbody;
    }
    public int getId() {
        return id;
    }
    public void setId(int id) {
        this.id = id;
    }
    public BigInteger getTranId() {
        return tranId;
    }
    public void setTranId(BigInteger tranId) {
        this.tranId = tranId;
    }
    public String getClientTranId() {
        return clientTranId;
    }
    public void setClientTranId(String clientTranId) {
        this.clientTranId = clientTranId;
    }
    public String getMsisdn() {
        return msisdn;
    }
    public void setMsisdn(String msisdn) {
        this.msisdn = msisdn;
    }
    public String getMsgbody() {
        return msgbody;
    }
    public void setMsgbody(String msgbody) {
        this.msgbody = msgbody;
    }
    @Override
    public String toString() {
        return "MSLApiAgent [id=" + id + ", tranId=" + tranId + ", clientTranId=" + clientTranId + ", msisdn=" + msisdn
                + ", msgbody=" + msgbody + "]";
    }

}

我的控制器:

@Controller
public class ApiAgentController {

    @RequestMapping("/test02")
    public String attaComsianTest02(Model model, MSLApiAgent mslApiAgent) {
        // request url
        String url = "http://localhost:8080/MSLSystem_3/api/v1/messages/4";

        // create an instance of RestTemplate
        RestTemplate restTemplate2 = new RestTemplate();

        // make an HTTP GET request

        HttpHeaders headers = new HttpHeaders();

        headers.setContentType(MediaType.APPLICATION_JSON);
        headers.setAccept(Collections.singletonList(MediaType.APPLICATION_JSON));

        HttpEntity request = new HttpEntity(headers);
        
        ResponseEntity<MSLApiAgent> exchange = restTemplate2.exchange(url, HttpMethod.GET,request,MSLApiAgent.class);
        
        MSLApiAgent body = exchange.getBody();
        int id = body.getId();
        BigInteger tranId = body.getTranId();
        String clientTranId = body.getClientTranId();
        String msisdn = body.getMsisdn();
        String msgbody = body.getMsgbody();

        model.addAttribute("exchanges", body);

        return "test02";
    }
}
<!DOCTYPE html>
<html lang="en" xmlns:th="http://www.w3.org/1999/xhtml">
<head>
<meta charset="UTF-8">
<title>test01</title>
</head>
<body>
    <h1>Here is your API data</h1>
    <table>
        <thead>
            <tr>
                <td>Id</td>
                <td>Transaction Id</td>
                <td>Client Id</td>
                <td>Mobile No.</td>
                <td>Messages</td>
            </tr>
        </thead>
        <tbody>
            <tr data-th-each="exchange : ${exchanges}">
                <td data-th-text="${exchange.id}">...</td>
                <td data-th-text="${exchange.tranId}">...</td>
                <td data-th-text="${exchange.clientTranId}">...</td>
                <td data-th-text="${exchange.msisdn}">...</td>
                <td data-th-text="${exchange.msgbody}">...</td>
            </tr>
        </tbody>
    </table>


</body>
</html>
String url = "http://localhost:8080/MSLSystem_3/api/v1/messages/4";
String url = "http://localhost:8080/MSLSystem_3/api/v1/messages";

第二件事:实际上,我想检查这个数据随机基础,像1秒间隔调度和存储最后的记录到我的数据库。好的方法是什么?

我已经尝试使用Timer和TimerTask准备好API URL。但我失败了。

共有1个答案

宇文飞翮
2023-03-14

当您使用http://localhost:8080/mslsystem_3/api/v1/messages时,它很可能返回一个JSON对象数组。

无法在此处将其序列化为MSLAPIagent类:

restTemplate2.exchange(url, HttpMethod.GET,request,MSLApiAgent.class);

您应该创建一个表示MSLAPIAgent对象集合的新类:

public class MSLApiAgentCollection {

    private List<MSLApiAgent> agents;

    // getter and setter
}
restTemplate2.exchange(url, HttpMethod.GET,request,MSLApiAgentCollection.class);
 类似资料:
  • null null 我需要从用户的输入int从1到10,并产生一个从1到10的随机数,如果两者相等,并且用户点击猜测按钮,应该显示消息告诉他是对还是错,如果他是对的,页面背景颜色应该是绿色,否则如果是错的,应该是红色

  • 我正在使用改型从我的android应用程序做api调用。但是响应显示带有ok消息的状态代码200。但是调用的数据由HttpClient返回。那么我该如何处理我的呼叫的响应数据呢?这里的回应将是 请求有效载荷 /okHttp.okHttpClient:{“data”:{“email”:“foobar@gmail.com”,“password121”}} 回应: OKHttp.OKHttpClient

  • 我一直在与Wordpress和Woocommerce合作,在我的管理产品页面中添加一个自定义元字段。我有一切工作正常,除了当我保存产品时,它不会显示我在我的元框中输入的信息。 我检查了数据库,数据确实保存了,我看到我在值中输入的数据,元字段名在元键中。这让我相信,除了在产品保存后在管理产品页面上显示价值外,其他一切都在运行。 我认为问题在于这两个函数中的一个,但不确定,它可能在save函数中,尽管

  • 假设我有一个Spring REST API,它在整个代码中返回了很多很多响应。 如果我想在发出的每一个响应中返回两个特定的头,我该如何以比在返回之前手动将它们添加到每一个响应中更智能的方式做到这一点呢? 有没有一种机制可以让我在发送之前捕捉响应,并添加报头?

  • 我正在使用jasperreport-4.5.0生成报告。它正在正确地生成报告。但是如果我的数据库中有大量数据,那么报告vl会显示在不同的页面中。所以我的要求是,如果我的报告有12页,那么我想显示12页中的第1页,12页中的第2页,12页中的第3页……就像我的页眉带一样。我怎么能做到这一点,任何人都可以对此提出一个想法。