У меня есть два класса - Table и ExcelService.
В таблице есть одно поле "Значения" (список>) и множество методов (конструктор по умолчанию также пуст).
В ExcelService есть метод POST ExportToCsv, который принимает объект типа Table в качестве ввода (table). В соответствии с этой документацией и примером , если application / json установлен для @Consumes, тогда RESTEasy должен автоматически демаршаллировать json в таблицу Table.
Но что бы я ни пытался сделать, таблица всегда пуста. Пожалуйста, скажите мне, что я делаю не так
Я пробовал разные версии пакетов и добавлял атрибуты XML в таблицу, так как в документации нет результата. Также следует добавить, что сортировка в противоположном направлении (когда RESTEasy отправляет JSON) работает!
Я тестирую метод при отладке с Почтальоном:
Моя конфигурация и код:
Пом:
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
<modelVersion>4.0.0</modelVersion>
<artifactId>SimpleExcel.Api</artifactId>
<groupId>simpleexcel.api</groupId>
<name>SimpleExcel.Api</name>
<version>1.0-SNAPSHOT</version>
<packaging>war</packaging>
<properties>
<maven.compiler.source>1.8</maven.compiler.source>
<maven.compiler.target>1.8</maven.compiler.target>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<failOnMissingWebXml>false</failOnMissingWebXml>
</properties>
<dependencies>
<!-- https://mvnrepository.com/artifact/org.jboss.resteasy/jaxrs-api -->
<dependency>
<groupId>org.jboss.resteasy</groupId>
<artifactId>jaxrs-api</artifactId>
<version>3.0.12.Final</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>org.jboss.resteasy</groupId>
<artifactId>resteasy-multipart-provider</artifactId>
<version>3.6.2.Final</version>
<scope>provided</scope>
</dependency><dependency>
<groupId>org.jboss.resteasy</groupId>
<artifactId>resteasy-jaxrs</artifactId>
<version>3.6.2.Final</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>org.jboss.resteasy</groupId>
<artifactId>resteasy-jackson-provider</artifactId>
<version>3.6.2.Final</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>com.google.code.gson</groupId>
<artifactId>gson</artifactId>
<version>2.8.5</version>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
<scope>test</scope>
</dependency>
</dependencies>
<!--<build>-->
<!--<!– –>-->
<!--<finalName>ROOT</finalName>-->
<!--</build>-->
<build>
<pluginManagement><!-- lock down plugins versions to avoid using Maven defaults (may be moved to parent pom) -->
<plugins>
<!-- clean lifecycle, see https://maven.apache.org/ref/current/maven-core/lifecycles.html#clean_Lifecycle -->
<plugin>
<artifactId>maven-clean-plugin</artifactId>
<version>3.1.0</version>
</plugin>
<!-- default lifecycle, jar packaging: see https://maven.apache.org/ref/current/maven-core/default-bindings.html#Plugin_bindings_for_jar_packaging -->
<plugin>
<artifactId>maven-resources-plugin</artifactId>
<version>3.0.2</version>
</plugin>
<plugin>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.8.0</version>
</plugin>
<plugin>
<artifactId>maven-surefire-plugin</artifactId>
<version>2.22.1</version>
</plugin>
<plugin>
<artifactId>maven-jar-plugin</artifactId>
<version>3.0.2</version>
</plugin>
<plugin>
<artifactId>maven-install-plugin</artifactId>
<version>2.5.2</version>
</plugin>
<plugin>
<artifactId>maven-deploy-plugin</artifactId>
<version>2.8.2</version>
</plugin>
<plugin>
<artifactId>maven-project-info-reports-plugin</artifactId>
<version>3.0.0</version>
</plugin>
<plugin>
<artifactId>maven-assembly-plugin</artifactId>
<version>3.1.0</version>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-jar-plugin</artifactId>
</plugin>
</plugins>
</pluginManagement>
</build>
</project>
Table.java:
package simpleexcel.api.models;
import com.google.gson.Gson;
import javax.xml.bind.annotation.XmlAccessType;
import javax.xml.bind.annotation.XmlAccessorType;
import javax.xml.bind.annotation.XmlElement;
import javax.xml.bind.annotation.XmlRootElement;
import java.io.*;
import java.nio.charset.StandardCharsets;
import java.util.*;
import java.util.stream.Collectors;
import java.util.stream.IntStream;
/**
* Table model
*/
@XmlRootElement
@XmlAccessorType(XmlAccessType.FIELD)
public class Table {
@Override
public String toString()
{
return new Gson().toJson(Values);
}
@XmlElement(name = "values")
private List<List<String>> Values;
/**
*
*
*/
public Table()
{
}
//...
}
ExcelService.java:
package simpleexcel.api.restServices;
import org.jboss.resteasy.plugins.providers.multipart.InputPart;
import org.jboss.resteasy.plugins.providers.multipart.MultipartFormDataInput;
import simpleexcel.api.models.Table;
import javax.ws.rs.Consumes;
import javax.ws.rs.POST;
import javax.ws.rs.Path;
import javax.ws.rs.Produces;
import javax.ws.rs.core.MediaType;
import javax.ws.rs.core.MultivaluedMap;
import javax.ws.rs.core.Response;
import java.io.InputStream;
import java.util.List;
import java.util.Map;
@Path("/table")
public class ExcelService
{
@POST
@Path("/export")
@Consumes(MediaType.APPLICATION_JSON)
@Produces(MediaType.MULTIPART_FORM_DATA)
public Response ExportToCsv(Table table)
{
//**ERROR HERE** table always NULL
InputStream temp = table.ExportToCsv(";");
return Response.ok().encoding("utf-8").entity(temp).build();
}
//...
}
Мне нужно заполнить таблицу (включая список значений)
P.S. Я также просмотрел различные статьи здесь, может быть, кто-то считает их дубликатом. Может быть и так, но я никогда не встречал пример с List >
Gitlab: