使用哪一个?
final Locale locale = Locale.forLanguageTag("en-US");
Run Code Online (Sandbox Code Playgroud)
或者
final Locale locale = new Locale("en", "US");
Run Code Online (Sandbox Code Playgroud)
当您查看它们的实现时,它们都有大量代码,我无法从这些代码中看出哪一个更快或应该首选。
由于我将它用于对 Web 应用程序的每个请求,因此很高兴知道哪一个更适合我的情况。
我试图在对 Spring Boot 控制器执行 POST/PUT 时保留在前端设置的 ZonedDateTime 的 ZoneId。
我要转移的价值是:
2019-05-01T00:00:00+01:00[Europe/Zagreb]
POST/PUT 后,ZoneId 将转换为 UTC 并调整小时数。从技术上讲,这个更新的值代表时间线上的同一点,但原始的 ZoneId 丢失了,我希望将其存储起来以便稍后将其显示给最终用户。
// DTO
public class PriceInfoDTO {
@JsonFormat( pattern = "yyyy-MM-dd'T'HH:mm:ssXXX['['VV']']",
with = JsonFormat.Feature.WRITE_DATES_WITH_ZONE_ID )
@DateTimeFormat( pattern = "yyyy-MM-dd'T'HH:mm:ssXXX['['VV']']", iso = ISO.DATE_TIME )
private ZonedDateTime validFrom;
}
// Controller
@PutMapping(
path = PATH + "/{id}",
consumes = MediaType.APPLICATION_JSON_VALUE,
produces = MediaType.APPLICATION_JSON_VALUE
)
public ResponseEntity<PriceInfo> update(
@PathVariable("id") final Integer id,
@RequestBody final PriceInfoDTO dto
) {
System.out.println(dto);
...
}
Run Code Online (Sandbox Code Playgroud)
查看浏览器中的 Network 选项卡,从浏览器到 Spring Controller …
我使用 Java 8、Spring Boot 和 Hibernate Search,看起来应用程序启动在 Lucene 索引初始化时停止。尝试使用以前用 SB 2.2.7 构建的索引文件,但没有成功。还尝试删除 Lucene 制作的所有文件并重新开始,但没有成功。尽管我将所有内容都放在跟踪日志级别中,但日志中没有任何内容可以帮助了解发生了什么。
请参阅 pom.xml 和下面的最后几行日志。如果需要,我可以提供完整的跟踪日志。
pom.xml
<?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/xsd/maven-4.0.0.xsd"
>
<modelVersion>4.0.0</modelVersion>
<groupId>com.thevegcat</groupId>
<artifactId>TheVegCat</artifactId>
<version>0.4.0-SNAPSHOT</version>
<packaging>war</packaging>
<name>The Vegan Catalog</name>
<description>The Best World Vegan Catalog by H.Lo</description>
<developers>
<developer>
<id>HLo</id>
<name>Hrvoje Lon?ar</name>
<email>horvoje@gmail.com</email>
</developer>
</developers>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.3.0.RELEASE</version>
<relativePath />
</parent>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
<java.version>1.8</java.version>
<hibernate.version>5.4.16.Final</hibernate.version>
<groovy-all.version>3.0.4</groovy-all.version>
<junit-jupiter.version>5.6.2</junit-jupiter.version>
<tika-core.version>1.24.1</tika-core.version>
<jsoup.version>1.13.1</jsoup.version>
<hibernate-search-orm.version>5.11.5.Final</hibernate-search-orm.version>
<opencsv.version>5.2</opencsv.version>
<org.eclipse.jdt.annotation.version>2.2.400</org.eclipse.jdt.annotation.version>
<jacoco.version>0.8.5</jacoco.version>
<junit-platform-surefire-provider.version>1.3.2</junit-platform-surefire-provider.version>
<commons-io.version>2.6</commons-io.version>
<urlrewritefilter.version>4.0.4</urlrewritefilter.version>
<json-simple.version>1.1.1</json-simple.version>
</properties>
<dependencies>
<dependency>
<groupId>jakarta.validation</groupId>
<artifactId>jakarta.validation-api</artifactId>
</dependency> …
Run Code Online (Sandbox Code Playgroud) 我正在尝试使用最新版本从头开始设置 Spring Boot 3.0.1 项目。到目前为止,我设法使 mvc 和存储库正常工作,但是在添加 Hibernate Search 时,事情将不再起作用。
下面你可以看到我的pom.xml
文件。
当我进入“依赖层次结构”(Eclipse STS)时,我可以找到hibernate-core 5.6.11.Final
嵌入hibernate-search-mapper-pojo-base 6.1.7.Final
到hibernate-search-mapper-orm 6.1.7.Final
. 这是否意味着我必须手动排除此版本并包含更高版本?也hibernate-core 5.6.11.Final
有hibernate-commons-annotations 5.1.2.Final
嵌入。为什么这么复杂?我有什么遗漏的吗?
在控制台日志中我得到这个:
***************************
APPLICATION FAILED TO START
***************************
Description:
An attempt was made to call a method that does not exist. The attempt was made from the following location:
org.hibernate.cfg.annotations.BasicValueBinder.resolveJavaType(BasicValueBinder.java:1002)
The following method did not exist:
'java.lang.reflect.Type org.hibernate.annotations.common.reflection.ReflectionManager.toType(org.hibernate.annotations.common.reflection.XClass)'
The calling method's class, org.hibernate.cfg.annotations.BasicValueBinder, was loaded from the following location:
jar:file:/C:/Users/Hrvoje/.m2/repository/org/hibernate/orm/hibernate-core/6.1.6.Final/hibernate-core-6.1.6.Final.jar!/org/hibernate/cfg/annotations/BasicValueBinder.class …
Run Code Online (Sandbox Code Playgroud) 我正在创建一个后端服务,该服务应该向第三方服务发出一些请求并根据响应进行更新。单一的工作是由数千个微小的工作组成的。主要工作以及每个子工作的确切begin
时间应存储在报告中。主要作业也可以从网络用户界面运行,这意味着其他时区取决于登录的用户。end
begin
end
最初的想法(和实现)是在主作业的一开始就存储ZoneId
(如果作业按计划启动,则存储在本地服务器中;如果用户手动启动作业,则存储在登录用户中),然后用于LocalDateTime
存储begin
和end
主要工作和子工作。或者在这种情况下我应该使用Instant
而不是LocalDateTime
?
private ZoneId zoneId;
private LocalDateTime begin;
private LocalDateTime end;
Run Code Online (Sandbox Code Playgroud)
我不确定这是否是正确的使用方式,或者我应该为每个ZoneId
使用它,并忘记独立的属性。ZonedDateTime
begin
end
ZoneId
private ZonedDateTime begin;
private ZonedDateTime end;
Run Code Online (Sandbox Code Playgroud)
编辑:只是为了为未来的读者提供更多信息:
情况 1将是 cron 作业,它将每天在某个时间运行一次(具体时间并不重要,但每天的同一时间)并且报告将显示“开始作业于”、“完成作业于”。
情况 2是当单击“立即运行更新”时,相同的作业将运行并生成相同的报告。
有没有办法将 Lombok@Builder
与 Java 泛型一起使用?
@Builder
public class Response<T> {
private String status;
private long total;
private List<T> page;
}
Run Code Online (Sandbox Code Playgroud)
稍后在处理来自控制器的请求的服务中:
long total = getTotalItemsCount();
List<Article> page = getPage();
Response<Article> response =
Response.builder()
.status("ok")
.total(total)
.page(page); // error on this line
Run Code Online (Sandbox Code Playgroud)
无法调用page
方法:
page(List<Object>)
类型中的 方法Response.ResponseBuilder<Object>
不适用于参数 (List<Article>
)
有任何想法吗?
java ×6
spring ×4
spring-boot ×3
builder ×1
controller ×1
generics ×1
hibernate ×1
java-time ×1
locale ×1
localization ×1
lombok ×1
lucene ×1