json Jersey RESTfulMap返回空对象或MismatchedInputException

92dk7w1h  于 2023-08-08  发布在  其他
关注(0)|答案(1)|浏览(89)

我的前端服务器发送一个从VueJS表单构建的JSON。我正在尝试使用Jersey 2.32来获取、Map和解析这个JSON。

{
    "objetDesLiensDuTheme": {
        "id": 7195,
        "formalisation": {
            "selectTitreFichier": "fiche de formalisation",
            "inputTitreFichier": "fiche de formalisation titre fichier",
            "inputFichier": {},
        },
        "modop": {
            "selectTitreFichier": "fiche méthodologique",
            "inputTitreFichier": "fiche méthodologique titre fichier",
            "inputFichier": {},
        },
    }
}

字符串
我已经将其字符串化以显示其结构,但它是一个JSON对象,console.log也向我显示了“inputFichier”的内容:

inputFichier: File { name: "Fichier formalisation.txt", lastModified: 1690373320586, size: 0, type: "text/plain", webkitRelativePath: ""}


我的REST控制器方法看起来像这样:

@POST
@Path("/create")
@Consumes(MediaType.APPLICATION_JSON)
public Response createLien(@BeanParam LiensDTO objetDesLiensDuTheme)
{
    Response response;
    //TODO
    System.out.println(objetDesLiensDuTheme);

    response = Response.status(Status.CREATED).build();
    return response;
}


但是根据toString方法,bean参数似乎为null:

LiensDTO [objetDesLiensDuTheme=null]


下面是LiensDTO类(getter和setter未显示):

public class LiensDTO implements Serializable
    {
        private static final long serialVersionUID = -5717326975468155988L;

        public LiensDTO()
        {
            super();
        }

        @FormParam("objetDesLiensDuTheme")
        // @JsonProperty("objetDesLiensDuTheme")
        private DocLienDTO objetDesLiensDuTheme;

        @Override
        public String toString()
        {
            return "LiensDTO [objetDesLiensDuTheme=" + objetDesLiensDuTheme + "]";
        }
    }


下面是DocLienDTO类(未显示getter和setter):

public class DocLienDTO implements Serializable
    {
        private static final long serialVersionUID = -493282593738066056L;

        private int id;

        private DocumentDTO formalisation;

        private DocumentDTO modop;
    }


最后是DocumentDTO类(未显示getter和setter):

public class DocumentDTO implements Serializable
{
  private static final long serialVersionUID = -6698584238714969958L;

  private String selectTitreFichier;

  private String inputTitreFichier;

  private File inputFichier;

}


当我尝试不使用@BeanParam注解(如所描述的here或在rest控制器中使用@RequestBody注解)时,我得到了以下异常:com.fasterxml.jackson.databind.exc.MismatchedInputException: Cannot deserialize instance of API.bean.LiensDTO out of START_ARRAY token at [Source: (org.glassfish.jersey.message.internal.ReaderInterceptorExecutor$UnCloseableInputStream); line: 1, column: 1].
但是,json对象不包含数组。
我还尝试使用@JsonProperty("objetDesLiensDuTheme")而不是@FormParam("objetDesLiensDuTheme")
我想获取并迭代通过“objetDesLiensDuTheme”对象为我的上传模块。

jtjikinw

jtjikinw1#

问题是我的JSON包含File对象。
但是不能直接将File对象转换为JSON,即使使用JSON.stringify也不行。
有三种解决方案描述here。我选择了base64编码文件之前stringify整个身体对象。

相关问题