【问题标题】:How to pass a Optional List of User bean to JsonParser to generate PDF如何将用户 bean 的可选列表传递给 JsonParser 以生成 PDF
【发布时间】:2019-11-12 10:42:59
【问题描述】:

我正在尝试从我的 Spring Boot 应用程序生成 PDF。我正在使用 itextpdf 和 pdfbox 。我在Optional<List<User>> bean 中获取所需的用户详细信息。如何将此 bean 转换/传递给仅接受字符串的 JsonParser?

这是我迄今为止尝试过的

控制器:-

import com.google.gson.Gson;
import com.google.gson.GsonBuilder;
import com.google.gson.JsonElement;
import com.google.gson.JsonParser;
import com.itextpdf.text.*;
import com.itextpdf.text.pdf.PdfWriter;

import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;

import javax.ws.rs.GET;
import javax.ws.rs.Path;
import javax.ws.rs.Produces;
import javax.ws.rs.WebApplicationException;
import javax.ws.rs.core.Response;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.lang.reflect.Field;
import java.util.List;
import java.util.Optional;
import java.util.stream.Collectors;
import java.util.stream.Stream;

import static javax.ws.rs.core.MediaType.APPLICATION_JSON;
import static javax.ws.rs.core.MediaType.APPLICATION_OCTET_STREAM;
import static javax.ws.rs.core.Response.status;
import static org.apache.http.HttpStatus.SC_BAD_REQUEST;
import static org.apache.http.HttpStatus.SC_OK;

@Slf4j
@EnableLogging
@Path("/UserDetails")
public class UserDetails {

    @GET
    @Produces(APPLICATION_JSON)
    public Response execute() throws WebApplicationException, FileNotFoundException, DocumentException {

        Optional<List<User>> user = DAO.getUsers();



        if (user.isPresent()) {
            Gson gson = new GsonBuilder().setPrettyPrinting().create();
            JsonParser jp = new JsonParser();
            JsonElement je = jp.parse("Some String");
            String prettyJsonString = gson.toJson(je);
            Document document = new Document();
            PdfWriter.getInstance(document, new FileOutputStream("myJSON.pdf"));

            document.open();
            Font font = FontFactory.getFont(FontFactory.COURIER, 16, BaseColor.BLACK);
            Chunk chunk = new Chunk(prettyJsonString, font);

            document.add(chunk);
            document.close();
            return status(SC_OK).entity(user).build();
        } else {
            return status(SC_BAD_REQUEST).entity(user).build();
        }
    }
}

【问题讨论】:

  • 我没有看到任何 PDFBox 代码,那为什么是标签?

标签: spring-boot pdf itext pdfbox


【解决方案1】:

首先,你需要将你的java对象转换成JSON字符串,你可以这样:

Gson gson = new Gson();
String jsonInString = gson.toJson(yourObj);

请记住,gson 有很多选项可用于在序列化过程中如何格式化输出。

【讨论】:

  • user 是我要转换为 JSON 字符串的对象。但是我在做同样的事情时遇到了错误。我正在按照您在上面代码中的建议进行操作。检查以下行:-String prettyJsonString = gson.toJson(je);。我要解决的问题是将我的Optional&lt;List&lt;User&gt;&gt; bean 转换为字符串。我需要这部分的帮助。其余代码工作正常。
  • “但是我在做同样的事情时遇到了错误。” => 在您的问题中包含该错误以及一些堆栈跟踪。 (您可以编辑您的问题)
  • @cyberman123 将user 变量传递给toJson 方法:String jsonInString = gson.toJson(user); 但在检查可选值是否存在之前。如果你确定就做String jsonInString = gson.toJson(user.get());
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-05-16
  • 1970-01-01
  • 2019-02-20
  • 1970-01-01
  • 2022-12-09
  • 2015-08-23
相关资源
最近更新 更多