- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我已经厌倦了我的问题。我有一个 JSON,我正在尝试:
1.使用Jackson将其转换为POJO,并在Spring Boot应用程序中自定义方法
2. 使用 H2 Db 和 Hibernate 保存: 下面的 JSON 不起作用。
没有“国家/地区”:一切正常。
请向我解释一下“国家/地区”是什么意思以及如何将其保存到数据库中?
另外]之后的最后一个“Date”:“2020-04-05T06:37:00Z”意味着什么,我也应该将其保存到数据库吗?
JSON:
{
"Countries": [
{
"Country": "ALA Aland Islands",
"CountryCode": "AX",
"Slug": "ala-aland-islands",
"NewConfirmed": 0,
"TotalConfirmed": 0,
"NewDeaths": 0,
"TotalDeaths": 0,
"NewRecovered": 0,
"TotalRecovered": 0,
"Date": "2020-04-05T06:37:00Z"
},
{
"Country": "Afghanistan",
"CountryCode": "AF",
"Slug": "afghanistan",
"NewConfirmed": 18,
"TotalConfirmed": 299,
"NewDeaths": 1,
"TotalDeaths": 7,
"NewRecovered": 0,
"TotalRecovered": 10,
"Date": "2020-04-05T06:37:00Z"
}
],
"Date": "2020-04-05T06:37:00Z"
}
我的POJO:
@Data
@AllArgsConstructor
@Entity
public class Country {
@JsonProperty("Countries")
ArrayList <Country> countries = new ArrayList<>();
@Id
@GeneratedValue
@Column(name = "id")
Long id;
@JsonProperty("Country")
private String country;
@JsonProperty("CountryCode")
private String countryside;
@JsonProperty("Slug")
private String slug;
@JsonProperty("NewConfirmed")
private Integer newConfirmed;
@JsonProperty("TotalConfirmed")
private Integer totalConfirmed;
@JsonProperty("NewDeaths")
private Integer newDeaths;
@JsonProperty("TotalDeaths")
private Integer totalDeaths;
@JsonProperty("NewRecovered")
private Integer newRecovered;
@JsonProperty("TotalRecovered")
private Integer totalRecovered;
@JsonProperty("Date")
private String date;
public Country() {
}
}
错误:
2020-05-10 01:07:52.255 INFO 27321 --- [ restartedMain] com.vicchern.Covid19JsonToDb : Started Covid19JsonToDb in 3.786 seconds (JVM running for 4.595)
**Unable to save users: Cannot deserialize instance of `java.util.ArrayList<com.vicchern.domain.Country>` out of START_OBJECT token**
at [Source: (BufferedInputStream); line: 2, column: 1]
2020-05-10 01:07:52.632 INFO 27321 --- [on(2)-127.0.0.1] o.a.c.c.C.[Tomcat].[localhost].[/] : Initializing Spring DispatcherServlet 'dispatcherServlet'
2020-05-10 01:07:52.633 INFO 27321 --- [on(2)-127.0.0.1] o.s.web.servlet.DispatcherServlet : Initializing Servlet 'dispatcherServlet'
2020-05-10 01:07:52.642 INFO 27321 --- [on(2)-127.0.0.1] o.s.web.servlet.DispatcherServlet : Completed initialization in 9 ms
我想用 Jackson 将其转换为 POJO,在 Spring Boot 应用程序中使用此自定义方法并保存到数据库:
public static void main(String[] args) {
SpringApplication.run(Covid19JsonToDb.class, args);
}
@Bean
CommandLineRunner runner(UserService userService){
return args -> {
// read JSON and load json
ObjectMapper mapper = new ObjectMapper();
TypeReference<List<Country>> typeReference = new TypeReference<>(){};
InputStream inputStream = TypeReference.class.getResourceAsStream("/json/countries.json");
try {
List<Country> users = mapper.readValue(inputStream,typeReference);
userService.save(users);
System.out.println("Users Saved!");
} catch (IOException e){
System.out.println("Unable to save users: " + e.getMessage());
}
};
}
这是我的服务:
@Service
public class CountryService {
private CountryRepository countryRepository;
public CountryService(CountryRepository countryRepository) {
this.countryRepository = countryRepository;
}
public Iterable<Country> list() {
return countryRepository.findAll();
}
public Country save(Country country) {
return countryRepository.save(country);
}
public void save(List<Country> countries) {
countryRepository.saveAll(countries);
}
}
Repository 实现 JpaRepository(无自定义输入)
我已经在这里和互联网上阅读了很多内容。我看过关于列表“包装器”的答案。但该如何处理,请大家帮忙指点一下。
最佳答案
我发现您上面发布的代码有两个问题。
1) 您需要一个 Country
列表,但您的 JSON 实际上是 Country
的对象。
TypeReference<List<Country>> typeReference = new TypeReference<>(){};
应该改为,
TypeReference<Country> typeReference = new TypeReference<>(){};
2) 您只有一个代表国家/地区及其信息的类,但实际上您需要两个不同的类,因为 Countries
不是国家/地区信息对象的一部分(您是通过将其包含在同一个类中来期望它成为它的一部分)。
分割的类应该看起来像这样,
@Data
@AllArgsConstructor
@Entity
public class Country {
@JsonProperty("Countries")
List<CountryMetadata> countries = new ArrayList<>();
public Country() {
// ...
}
}
@Data
@AllArgsConstructor
@Entity
public class CountryMetadata {
@Id
@GeneratedValue
@Column(name = "id")
Long id;
@JsonProperty("Country")
private String country;
@JsonProperty("CountryCode")
private String countryside;
@JsonProperty("Slug")
private String slug;
@JsonProperty("NewConfirmed")
private Integer newConfirmed;
@JsonProperty("TotalConfirmed")
private Integer totalConfirmed;
@JsonProperty("NewDeaths")
private Integer newDeaths;
@JsonProperty("TotalDeaths")
private Integer totalDeaths;
@JsonProperty("NewRecovered")
private Integer newRecovered;
@JsonProperty("TotalRecovered")
private Integer totalRecovered;
@JsonProperty("Date")
private String date;
public CountryMetadata() {
// ...
}
}
关于java - 无法保存用户: Cannot deserialize instance of `java.util.ArrayList<>` out of START_OBJECT token at [Source: (BufferedInputStream),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61704917/
我的应用使用 Jackson。我得到的最小化构建主要使用此配置: # don't obfuscate Jackson classes -keep class com.fasterxml.** { *;
编辑:在我问这个问题的那一刻,我想到了尝试一些事情..我已经根据请求设置了 XmlNamespace 属性,这就成功了.. request.XmlNamespace = "http://musicbr
我使用可序列化和可反序列化的泛型。但是,Deserialize上有错误派生属性告诉无法推断类型。 struct 和 enum 都会抛出编译错误。评论其中之一不会解决任何问题。 use serde::{
passport.socketio 抛出此错误,同时无法授权用户。 Error: Error: Failed to deserialize user out of session 我已将问题范围缩小到
我正在尝试在具有借用内容的结构上派生反序列化: #[macro_use] extern crate serde_derive; use std::net::SocketAddr; #[derive(H
我执行查询以创建下面的Hive表: CREATE TABLE db1.test_create_tbl( column1 smallint COMMENT 'desc of column') COMME
这个问题在这里已经有了答案: Can System.Text.Json.JsonSerializer serialize collections on a read-only property? (
我正在使用 event_emmiter_rs用于我的应用程序中的事件处理。该库允许您订阅带有回调的事件并触发这些事件。事件采用 (strings, value) 的形式,回调采用接受值参数的闭包形式。
我收到一个错误...(不存在像默认构造函数这样的创建者):无法从对象值反序列化(没有基于委托(delegate)或基于属性的创建者),这表明我需要一个属性基于的创作者。我有几个具有不同参数但没有默认值
我相信我们需要一个自定义的反序列化器来对我们类的一个字段做一些特定的事情。看来一旦我这样做了,我现在负责反序列化所有其他领域。有没有办法让 jackson 反序列化除了我在这里关心的领域之外的所有领域
我有一个如下所示的类(class) class Person { Long id; String firstName; int age; } 我的输入看起来像这样: { "id
文档建议 NancyFx 帮助我解决 json 请求正文的 WRT 反序列化,但我不确定如何。请参阅下面的测试以演示: [TestFixture] public class ScratchNancy
考虑代码... using System; using System.Text.Json; public class Program { public static void Main()
有人让Deserializer工作吗?我正在方法“反序列化”而不是元素中获得完整的JSON表达式? public static void main(String[] args) { G
在尝试从 tokio TcpStream 反序列化为 JSON Value 时,我正在尝试使用此函数: use futures::prelude::*; use serde_json::Value;
我使用 Spring Boot 和 thymeleaf我尝试保存对象列表。 我的对象。 public class GECPD { public Integer id; public S
我正在尝试制作在线领唱。我需要从外部API获取包含货币值的表,正是从该页面:http://api.nbp.pl/api/exchangerates/tables/A?format=json我想在货币课
错误: java.lang.ClassNotFoundException: testprocedure.tp$3 at java.net.URLClassLoader$1.run(Unknown So
我开发了多个 GWT Web 应用程序。最新的一个是对另一个的稍微修改。除了最新的之外,所有这些都运行良好。异常(exception)是: The response could not be dese
我需要反序列化 1.5GB txt 文件。我正在使用 code.google.com/p/protobuf-net/中的 protobuf-net 有时它会因不同地方的不同异常(空引用、内存访问冲突)
我是一名优秀的程序员,十分优秀!