- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试使用 openCSV 4.6 从 bean 列表中编写 CSV。但是,每当我运行程序时,我都会收到 CsvBeanIntrospectionException,然后收到 NoSuchMethodException: Unknown property 'Etrangers' on class 'class Properties'尝试操作 Properties 类中 bean 的属性 Etrangers 时抛出内省(introspection)错误。
这是我的对象“geojsonParsing”的代码:
import java.io.BufferedInputStream;
import java.io.BufferedReader;
import java.io.ByteArrayOutputStream;
import java.io.FileInputStream;
import java.io.FileWriter;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.Reader;
import java.io.StringWriter;
import java.io.Writer;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.util.ArrayList;
import java.util.Comparator;
import java.util.List;
import org.springframework.web.multipart.MultipartFile;
import com.codebind.Geometry.GeometryType;
import com.google.gson.GsonBuilder;
import com.google.gson.JsonDeserializationContext;
import com.google.gson.JsonDeserializer;
import com.google.gson.JsonElement;
import com.google.gson.JsonObject;
import com.google.gson.JsonParseException;
import com.opencsv.CSVWriter;
import com.opencsv.bean.CsvToBean;
import com.opencsv.bean.CsvToBeanBuilder;
import com.opencsv.bean.HeaderColumnNameMappingStrategy;
import com.opencsv.bean.MappingStrategy;
import com.opencsv.bean.StatefulBeanToCsv;
import com.opencsv.bean.StatefulBeanToCsvBuilder;
interface Geometry {
GeometryType getType();
enum GeometryType {
Polygon, MultiPolygon
}
}
class OrderedComparatorIgnoringCase implements Comparator<String> {
private List<String> predefinedOrder;
public OrderedComparatorIgnoringCase(String[] predefinedOrder) {
this.predefinedOrder = new ArrayList<>();
for(String item : predefinedOrder) {
this.predefinedOrder.add(item.toLowerCase());
}
}
@Override
public int compare(String o1, String o2) {
return predefinedOrder.indexOf(o1.toLowerCase()) - predefinedOrder.indexOf(o2.toLowerCase());
}
}
class CsvUtils {
private CsvUtils() {
}
public static <T> String convertToCsv(List<T> entitiesList, MappingStrategy<T> mappingStrategy) throws Exception {
try (Writer writer = new StringWriter()) {
StatefulBeanToCsv<T> beanToCsv = new StatefulBeanToCsvBuilder<T>(writer).withMappingStrategy(mappingStrategy).withQuotechar(CSVWriter.NO_QUOTE_CHARACTER).build();
beanToCsv.write(entitiesList);
return writer.toString();
}
}
@SuppressWarnings("unchecked")
public static <T> List<T> convertFromCsv(MultipartFile file, Class clazz) throws IOException {
try (Reader reader = new BufferedReader(new InputStreamReader(file.getInputStream()))) {
CsvToBean<T> csvToBean = new CsvToBeanBuilder<T>(reader).withType(clazz).build();
return csvToBean.parse();
}
}
}
class MultiPolygonGeometry implements Geometry {
private final GeometryType type = GeometryType.MultiPolygon;
private double[][][][] coordinates;
public GeometryType getType() {
return type;
}
public double[][][][] getCoordinates() {
return coordinates;
}
public void setCoordinates(double[][][][] coordinates) {
this.coordinates = coordinates;
}
}
class PolygonGeometry implements Geometry {
private final GeometryType type = GeometryType.Polygon;
private double[][][] coordinates;
public GeometryType getType() {
return type;
}
public double[][][] getCoordinates() {
return coordinates;
}
public void setCoordinates(double[][][] coordinates) {
this.coordinates = coordinates;
}
}
class Data {
public String getType() {
return type;
}
public void setType(String type) {
this.type = type;
}
public List<Feature> getFeatures() {
return features;
}
public void setFeatures(List<Feature> features) {
this.features = features;
}
private String type;
private List<Feature> features;
}
class Feature {
public String getType() {
return type;
}
public void setType(String type) {
this.type = type;
}
public Properties getProperties() {
return properties;
}
public void setProperties(Properties properties) {
this.properties = properties;
}
public Geometry getGeometry() {
return geometry;
}
public void setGeometry(Geometry geometry) {
this.geometry = geometry;
}
private String type;
private Properties properties;
private Geometry geometry;
}
class GeometryDeserializer implements JsonDeserializer<Geometry> {
@Override
public Geometry deserialize(JsonElement json,
java.lang.reflect.Type typeOfT,
JsonDeserializationContext context) throws JsonParseException {
JsonObject jsonObject = json.getAsJsonObject();
GeometryType type = context.deserialize(jsonObject.get("type"), GeometryType.class);
switch(type) {
case Polygon:
return context.deserialize(json, PolygonGeometry.class);
case MultiPolygon:
return context.deserialize(json, MultiPolygonGeometry.class);
default:
throw new JsonParseException("Unrecognized Geometry type: " + type);
}
}
}
// You only need to add/generate getters and s
public class geojsonParsing {
public static void main(String[] args) throws Exception {
GsonBuilder builder = new GsonBuilder();
final Path source = Paths.get(System.getProperty("user.dir") + "/REGIONS.json");
try (final InputStream is = new FileInputStream(source.toFile());
final BufferedInputStream bis = new BufferedInputStream(is);) {
ByteArrayOutputStream buf = new ByteArrayOutputStream();
int result = bis.read();
while(result != -1) {
buf.write((byte) result);
result = bis.read();
}
String jsonstring = buf.toString("UTF-8");
builder.registerTypeAdapter(Geometry.class, new GeometryDeserializer());
Data data = builder.create().fromJson(jsonstring, Data.class);
Writer writer = new FileWriter(System.getProperty("user.dir") + "/REGIONS.csv");
List<Properties> localBusinessTrainingPairsDTO = new ArrayList<>();
for(int i = 0; i < data.getFeatures().size(); i++) {
localBusinessTrainingPairsDTO.add(data.getFeatures().get(i).getProperties());
}
// Creating HeaderColumnNameMappingStrategy
HeaderColumnNameMappingStrategy<Properties> mappingStrategy = new HeaderColumnNameMappingStrategy<Properties>();
mappingStrategy.setType(Properties.class);
// Setting predefined order using String comparator
mappingStrategy.setColumnOrderOnWrite(new OrderedComparatorIgnoringCase(Properties.FIELDS_ORDER));
String csv = CsvUtils.convertToCsv(localBusinessTrainingPairsDTO, mappingStrategy);
System.out.println(csv);
writer.close();
}
catch(IOException e) {
e.printStackTrace();
}
}
}
import com.opencsv.bean.CsvBindByName;
public class Properties {
public static String[] getFieldsOrder() {
return FIELDS_ORDER;
}
public String getCODE_REGIO() {
return CODE_REGIO;
}
public void setCODE_REGIO(String cODE_REGIO) {
CODE_REGIO = cODE_REGIO;
}
public Integer getPopulation() {
return Population;
}
public void setPopulation(Integer population) {
Population = population;
}
public Integer getMenages() {
return Menages;
}
public void setMenages(Integer menages) {
this.Menages = menages;
}
public Integer getEtrangers() {
return Etrangers;
}
public void setEtrangers(Integer etrangers) {
this.Etrangers = etrangers;
}
public Integer getMarocains() {
return Marocains;
}
public void setMarocains(Integer marocains) {
this.Marocains = marocains;
}
public String getNom_Region() {
return Nom_Region;
}
public void setNom_Region(String nom_Region) {
Nom_Region = nom_Region;
}
public Integer getRuleID() {
return RuleID;
}
public void setRuleID(Integer ruleID) {
RuleID = ruleID;
}
public Double getShape__Are() {
return Shape__Are;
}
public void setShape__Are(Double shape__Are) {
Shape__Are = shape__Are;
}
public Double getShape__Len() {
return Shape__Len;
}
public void setShape__Len(Double shape__Len) {
Shape__Len = shape__Len;
}
@CsvBindByName(column = "CODE_REGIO")
private String CODE_REGIO;
@CsvBindByName(column = "Etrangers")
private Integer Etrangers;
@CsvBindByName(column = "Marocains")
private Integer Marocains;
@CsvBindByName(column = "Menages")
private Integer Menages;
@CsvBindByName(column = "Nom_Region")
private String Nom_Region;
@CsvBindByName(column = "Population")
private Integer Population;
@CsvBindByName(column = "RuleID")
private Integer RuleID;
@CsvBindByName(column = "Shape__Are")
private Double Shape__Are;
@CsvBindByName(column = "Shape__Len")
private Double Shape__Len;
public static final String[] FIELDS_ORDER = { "CODE_REGIO",
"Etrangers",
"Marocains",
"Menages",
"Nom_Region",
"Population",
"RuleID",
"Shape__Are",
"Shape__Len" };
}
对于行家
<dependency>
<groupId>com.google.code.gson</groupId>
<artifactId>gson</artifactId>
<version>2.8.6</version>
</dependency>
<dependency>
<groupId>com.opencsv</groupId>
<artifactId>opencsv</artifactId>
<version>4.6</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-web</artifactId>
<version>3.0.4.RELEASE</version>
</dependency>
我遇到的异常
Exception in thread "pool-1-thread-1" Exception in thread "pool-1-thread-4" Exception in thread "pool-1-thread-3" Exception in thread "pool-1-thread-2" com.opencsv.exceptions.CsvBeanIntrospectionException: An introspection error was thrown while attempting to manipulate property Etrangers of bean com.codebind.Properties.
at com.opencsv.bean.AbstractBeanField.write(AbstractBeanField.java:391)
at com.opencsv.bean.AbstractMappingStrategy.writeWithReflection(AbstractMappingStrategy.java:477)
at com.opencsv.bean.AbstractMappingStrategy.transmuteBean(AbstractMappingStrategy.java:458)
at com.opencsv.bean.concurrent.ProcessCsvBean.run(ProcessCsvBean.java:65)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
at java.lang.Thread.run(Thread.java:748)
Caused by: java.lang.NoSuchMethodException: Unknown property 'Etrangers' on class 'class com.codebind.Properties'
at org.apache.commons.beanutils.PropertyUtilsBean.getSimpleProperty(PropertyUtilsBean.java:1269)
at com.opencsv.bean.AbstractBeanField.write(AbstractBeanField.java:388)
... 6 moreException in thread "pool-1-thread-1" Exception in thread "pool-1-thread-4" Exception in thread "pool-1-thread-3" Exception in thread "pool-1-thread-2" com.opencsv.exceptions.CsvBeanIntrospectionException: An introspection error was thrown while attempting to manipulate property Etrangers of bean com.codebind.Properties.
at com.opencsv.bean.AbstractBeanField.write(AbstractBeanField.java:391)
at com.opencsv.bean.AbstractMappingStrategy.writeWithReflection(AbstractMappingStrategy.java:477)
at com.opencsv.bean.AbstractMappingStrategy.transmuteBean(AbstractMappingStrategy.java:458)
at com.opencsv.bean.concurrent.ProcessCsvBean.run(ProcessCsvBean.java:65)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
at java.lang.Thread.run(Thread.java:748)
Caused by: java.lang.NoSuchMethodException: Unknown property 'Etrangers' on class 'class com.codebind.Properties'
at org.apache.commons.beanutils.PropertyUtilsBean.getSimpleProperty(PropertyUtilsBean.java:1269)
at com.opencsv.bean.AbstractBeanField.write(AbstractBeanField.java:388)
... 6 more
最佳答案
我通过使用解决了
import com.opencsv.bean.HeaderColumnNameTranslateMappingStrategy;
而不是
import com.opencsv.bean.HeaderColumnNameMappingStrategy;
并使用
import org.apache.commons.collections4.comparators.FixedOrderComparato4r;
`
并通过创建 Hashmap 将 csv header 数据映射到 Bean 字段属性的大写起始字母。
// Hashmap to map CSV data to
// Bean attributes.
Map<String, String> mapping = new HashMap<String, String>();
mapping.put("code_regio", "CODE_REGIO");
mapping.put("etrangers", "Etrangers");
mapping.put("marocains", "Marocains");
mapping.put("menages", "Menages");
mapping.put("nom_region", "Nom_Region");
mapping.put("population", "Population");
mapping.put("ruleid", "RuleID");
mapping.put("shape__are", "Shape__Are");
mapping.put("shape__len", "Shape__Len");
// Creating HeaderColumnNameMappingStrategy
HeaderColumnNameTranslateMappingStrategy<Properties> mappingStrategy = new HeaderColumnNameTranslateMappingStrategy<Properties>();
mappingStrategy.setType(Properties.class);
mappingStrategy.setColumnMapping(mapping);
// Setting predefined order using String comparator
mappingStrategy.setColumnOrderOnWrite(new FixedOrderComparator<>(Properties.FIELDS_ORDER));
String csv = CsvUtils.convertToCsv(localBusinessTrainingPairsDTO, mappingStrategy);
System.out.println(csv);
writer.close();
在属性类中,我将所有 FIELDS_ORDER 都大写
public static final String[] FIELDS_ORDER = { "CODE_REGIO",
"ETRANGERS",
"MAROCAINS",
"MENAGES",
"NOM_REGION",
"POPULATION",
"RULEID",
"SHAPE__ARE",
"SHAPE__LEN" };
这样映射 bean Properties 类就会像下面这样
import com.opencsv.bean.CsvBindByName;
public class Properties {
public static String[] getFieldsOrder() {
return FIELDS_ORDER;
}
public String getCODE_REGIO() {
return CODE_REGIO;
}
public void setCODE_REGIO(String cODE_REGIO) {
CODE_REGIO = cODE_REGIO;
}
public int getPopulation() {
return Population;
}
public void setPopulation(int population) {
Population = population;
}
public int getMenages() {
return Menages;
}
public void setMenages(int menages) {
Menages = menages;
}
public int getEtrangers() {
return Etrangers;
}
public void setEtrangers(int etrangers) {
Etrangers = etrangers;
}
public int getMarocains() {
return Marocains;
}
public void setMarocains(int marocains) {
Marocains = marocains;
}
public String getNom_Region() {
return Nom_Region;
}
public void setNom_Region(String nom_Region) {
Nom_Region = nom_Region;
}
public int getRuleID() {
return RuleID;
}
public void setRuleID(int ruleID) {
RuleID = ruleID;
}
public double getShape__Are() {
return Shape__Are;
}
public void setShape__Are(double shape__Are) {
Shape__Are = shape__Are;
}
public double getShape__Len() {
return Shape__Len;
}
public void setShape__Len(double shape__Len) {
Shape__Len = shape__Len;
}
@CsvBindByName(column = "CODE_REGIO", required = true)
private String CODE_REGIO;
@CsvBindByName(column = "Etrangers", required = true)
private int Etrangers;
@CsvBindByName(column = "Marocains", required = true)
private int Marocains;
@CsvBindByName(column = "Menages", required = true)
private int Menages;
@CsvBindByName(column = "Nom_Region", required = true)
private String Nom_Region;
@CsvBindByName(column = "Population", required = true)
private int Population;
@CsvBindByName(column = "RuleID", required = true)
private int RuleID;
@CsvBindByName(column = "Shape__Are", required = true)
private double Shape__Are;
@CsvBindByName(column = "Shape__Len", required = true)
private double Shape__Len;
public static final String[] FIELDS_ORDER = { "CODE_REGIO",
"ETRANGERS",
"MAROCAINS",
"MENAGES",
"NOM_REGION",
"POPULATION",
"RULEID",
"SHAPE__ARE",
"SHAPE__LEN" };
}
关于java - OpenCSV java.lang.NoSuchMethodException : Unknown property 'X' on class Y,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60467105/
这是我的代码 14 20 {"Confirm Email"} 21 在第 17 行我得到错误 Type '{ pathname: string; user: { em
这是我的代码 14 20 {"Confirm Email"} 21 在第 17 行我得到错误 Type '{ pathname: string; user: { em
这个问题已经有答案了: How do I compare strings in Java? (23 个回答) 已关闭 8 年前。 为什么 KeyEvent.getKeyText(0).substrin
我正在尝试 Rust 的新 wasm32-unknown-unknown 目标,我在调用数学函数(例如 sin、cos、exp、atan2)时遇到问题。 cargo .toml: [package]
当我为 spring-boot 创建启动项目时,我在 pom 文件中收到此错误。这只是为了创建一个基本的 Spring Boot 项目 Project build error: Invalid pac
我已经订阅了我想要传输的数据。但不知何故它不起作用。我收到此错误: The property pipe is not available for type "OperatorFunction" 这是我
运行以下查询时。select * from surgerys where to_char(dt_surgery ,'DD-MM-YYYY' ) = to_char('12-02-2012','DD-M
我在运行存储过程时遇到以下异常: com.microsoft.sqlserver.jdbc.SQLServerException:不支持从 UNKNOWN 到 UNKNOWN 的转换。 过程定义如下:
我尝试运行以下代码。顺便说一句,我对 python 和 sklearn 都是新手。 import pandas as pd import numpy as np from sklearn.linear
我已经阅读了关于未知类型的官方文档,但我很难真正理解它是如何工作的。 人们可以在文档中读到:“在没有首先断言或缩小到更具体的类型之前,不允许对未知进行任何操作。” 但如果我有这个功能: const f
我正在尝试在Mac OS中设置Hadoop 2.6.0 我正在关注这篇文章: http://hadoop.apache.org/docs/r2.4.0/hadoop-project-dist/hado
配置 Nexus docker 注册表和代理“dockerhub-proxy”后,如下所述: https://help.sonatype.com/repomanager3/formats/docker
我收到此错误 - “ValueError:未知标签类型:'unknown'” 我已经在网上搜索但无法摆脱这个错误,顺便说一句,我是 python 的新手:) 我的数据有 5 行 22 列,最后一列是标
使用 SHA256 摘要标识符 拉取图像失败 最佳答案 不幸的是,这是 DockerHub 删除 Docker 1.9 守护进程的向后兼容性的副作用。当使用 Docker 1.10 推送图像时,较旧的
我是 postgresql 的新手,正在尝试使用全文搜索 to_tsvector但是我遇到了错误。 SQL 和错误 SELECT to_tsvector('english', 'The quick b
每当我这样做时 npm run watch ,第一次编译工作正常 - 但经过几次编译后,我最终会得到这个错误: 95% emitting unnamed compat pluginError: UNK
在一个新的 Angular 应用程序中,我收到以下错误:Error from chokidar : Error: UNKNOWN: unknown error, watch我已经删除并重新安装 nod
使用 Typescipt 4.x.x 我写了一些代码来实现其他语言 Elm/Rust/Haskell 中常用的 Maybe/Option 类型。 我想写一个可以接受映射类型的通用函数 type MyM
const submitted = useSelector((state) => state.post.submitted) 对于上面的状态。我得到错误: (参数)状态:未知对象的类型为“未知”。 这
我正在尝试将多架构 docker 镜像推送到 docker hub 并遇到错误(在 https://github.com/docker/distribution/issues/3100 处打开了 do
我是一名优秀的程序员,十分优秀!