小编Вяч*_*шов的帖子

LocalDate 序列化:日期作为数组?

我使用 Java 11 并希望将 LocalDate/LocalDateTime 序列化/反序列化为字符串。好的。我添加了依赖:

    <dependency>
        <groupId>com.fasterxml.jackson.datatype</groupId>
        <artifactId>jackson-datatype-jsr310</artifactId>
        <version>${jackson.version}</version>
    </dependency>
Run Code Online (Sandbox Code Playgroud)

和模块:

@Bean
public ObjectMapper objectMapper() {
    return new ObjectMapper()
            .registerModule(new JavaTimeModule())
            .configure(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS, false)
            .enable(DeserializationFeature.ACCEPT_SINGLE_VALUE_AS_ARRAY);
}
Run Code Online (Sandbox Code Playgroud)

当我将日期发送到我的应用程序时,它会正确反序列化:

{"profileId":12608,"birthDate":"2008-03-20","relativeType":"SON","cohabitants":true}
Run Code Online (Sandbox Code Playgroud)

当我直接使用 objectMapper 作为 bean 时,它也可以正确序列化:

{"code":"SUCCESS","id":868,"profileId":12608,"birthDate":"2008-03-20","relativeType":"SON","cohabitants":true}
Run Code Online (Sandbox Code Playgroud)

但是当它与控制器序列化时,它序列化为数组:

{"code":"SUCCESS","id":868,"profileId":12608,"birthDate":[2008,3,20],"relativeType":"SON","cohabitants":true}
Run Code Online (Sandbox Code Playgroud)

问题是在控制器上反序列化正文中的日期。控制器是:

@PostMapping
public Relative create(@Validated(Validation.Create.class) @RequestBody Relative relative) {
    return service.create(relative);
}
Run Code Online (Sandbox Code Playgroud)

相对类:

@Getter
@Setter
@ToString(callSuper = true)
@JsonInclude(JsonInclude.Include.NON_EMPTY)
public class Relative extends MortgageResponse {

    @Null(groups = Validation.Create.class)
    @NotNull(groups = Validation.Update.class)
    private Long id;

    @NotNull
    private Long profileId;

    private LocalDate birthDate;
    private RelativeType relativeType; …
Run Code Online (Sandbox Code Playgroud)

java spring objectmapper

12
推荐指数
1
解决办法
1万
查看次数

Slf4j:找到 slf4j-api 依赖,但没有找到提供者

我用龙目岛。前段时间在构建项目时,编译器开始发出以下消息:

找到 slf4j-api 依赖项,但未找到提供程序。您是要添加 slf4j-simple 吗?请参阅https://www.slf4j.org/codes.html#noProviders

如果你点击链接,会有一个相当模糊的评论:

当在类路径上找不到 SLF4J 提供程序时,将报告此警告(即不是错误)消息。将 slf4j-nop.jar、slf4j-simple.jar、slf4j-log4j12.jar、slf4j-jdk14.jar 或 logback-classic.jar 中的一个(并且只有一个)放在类路径上应该可以解决问题。请注意,这些提供程序必须针对 slf4j-api 1.8 或更高版本。

在没有提供者的情况下,SLF4J 将默认为无操作 (NOP) 记录器提供者。

请注意 slf4j-api 版本 1.8.x 及更高版本使用 ServiceLoader 机制。早期版本依赖于 slf4j-api 不再支持的静态绑定器机制。请阅读常见问题条目 SLF4J 1.8.0 版有何变化?了解更多重要细节。

如果您负责打包应用程序并且不关心日志记录,那么将 slf4j-nop.jar 放在您的应用程序的类路径中将消除此警告消息。请注意,诸如库或框架之类的嵌入式组件不应声明对任何 SLF4J 提供程序的依赖,而应仅依赖于 slf4j-api。当一个库声明对 SLF4J 提供者的编译时依赖时,它会将该提供者强加给最终用户,从而否定 SLF4J 的目的。

我不知道如何正确地做到这一点。如果你有经验,请告诉我怎么做。

java slf4j

9
推荐指数
1
解决办法
2万
查看次数

如何使用返回void的功能接口?

我有这个结构:

if (Objects.isNull(user.getMartialStatus())) {
    user.setMartialStatus(MartialStatus.MARRIED);
 }
Run Code Online (Sandbox Code Playgroud)

我有很多,我想使用函数式接口优化代码。好的。我写这样的东西:

public static <T> void processIfNull(T o, Supplier<Void> s) {
    if (Objects.isNull(o)) {
        s.get();
    }
}
Run Code Online (Sandbox Code Playgroud)

然后,我等待这段代码可以工作:

processIfNull(user.getMartialStatus(), () -> user.setMartialStatus(MartialStatus.MARRIED));
Run Code Online (Sandbox Code Playgroud)

但 IDEA 写道:

void 与 Void 不兼容

请告诉我该怎么办。

java

5
推荐指数
1
解决办法
127
查看次数

java.lang.IllegalStateException:在当前请求已调用 getReader() 后无法调用 getInputStream()

我写了拦截器:

@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
    log.info("[pre-handle] method: {}\tURL: {}", request.getMethod(), request.getRequestURL());
    if (HttpMethod.POST.name().equals(request.getMethod())) {
        log.info(request.getReader().lines().collect(Collectors.joining()));
    }
    return true;
}
Run Code Online (Sandbox Code Playgroud)

但是当我尝试调用控制器时,会抛出异常:

java.lang.IllegalStateException:在当前请求已调用 getReader() 后无法调用 getInputStream()

据我了解, getReader() 调用关闭 InputStream 并且没有任何内容到达控制器。如何修复它?

java interceptor

5
推荐指数
1
解决办法
4397
查看次数

Log4j:如何编写配置?

我将Log4j2添加到项目中,并添加了config。

# Root logger option
log4j.rootLogger=INFO, file, stdout

# Direct log messages to a log file
log4j.appender.file=org.apache.log4j.RollingFileAppender
log4j.appender.file.File=C:\\logging.log
log4j.appender.file.MaxFileSize=10MB
log4j.appender.file.MaxBackupIndex=10
log4j.appender.file.layout=org.apache.log4j.PatternLayout
log4j.appender.file.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} %-5p %c{1}:%L - %m%n

# Direct log messages to stdout
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.Target=System.out
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} %-5p %c{1}:%L - %m%n
Run Code Online (Sandbox Code Playgroud)

然后,我记录如下代码:

import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;

...

final static Logger logger = LogManager.getLogger(AbstractEditor.class);

...

logger.info("updated: " + entity);
logger.debug("==> debug");
logger.info("==> info");
logger.warn("==> warn");
logger.error("==> error");
logger.fatal("==> fatal");
logger.trace("==> trace");
Run Code Online (Sandbox Code Playgroud)

据我了解,所有级别高于DEBUG的日志都必须写入控制台和文件。但只有这个被打印到控制台:

15:08:52.285 [http-nio-8080-exec-1] ERROR ru.example.AbstractEditor - ==> error
15:08:52.292 …
Run Code Online (Sandbox Code Playgroud)

java log4j2

4
推荐指数
1
解决办法
3400
查看次数

java.lang.RuntimeException:从 jar 扫描入口模块信息.class 时出错

我尝试使用 gretty 运行项目。它抛出异常:

10:47:39 WARN  Failed startup of context o.a.g.JettyWebAppContext@52045dbe{/,file:/C:/IdeaProjects/example-tab/build/inplaceWebapp/,STARTING}
java.lang.RuntimeException: Error scanning entry module-info.class from jar file:/C:/Users/user1/.gradle/caches/modules-2/files-2.1/org.apache.logging.log4j/log4j-api/2.10.0/fec5797a55b786184a537abd39c3fa1449d752d6/log4j-api-2.10.0.jar
    at org.eclipse.jetty.annotations.AnnotationParser.parseJar(AnnotationParser.java:913) ~[jetty-annotations-9.2.24.v20180105.jar:9.2.24.v20180105]
    at org.eclipse.jetty.annotations.AnnotationParser.parse(AnnotationParser.java:831) ~[jetty-annotations-9.2.24.v20180105.jar:9.2.24.v20180105]
    at org.eclipse.jetty.annotations.AnnotationConfiguration$ParserTask.call(AnnotationConfiguration.java:164) ~[jetty-annotations-9.2.24.v20180105.jar:9.2.24.v20180105]
    at org.eclipse.jetty.annotations.AnnotationConfiguration$1.run(AnnotationConfiguration.java:549) ~[jetty-annotations-9.2.24.v20180105.jar:9.2.24.v20180105]
    at org.eclipse.jetty.util.thread.QueuedThreadPool.runJob(QueuedThreadPool.java:635) ~[jetty-util-9.2.24.v20180105.jar:9.2.24.v20180105]
    at org.eclipse.jetty.util.thread.QueuedThreadPool$3.run(QueuedThreadPool.java:555) ~[jetty-util-9.2.24.v20180105.jar:9.2.24.v20180105]
    at java.lang.Thread.run(Thread.java:748) ~[na:1.8.0_171]
Caused by: java.lang.UnsupportedOperationException: null
    at org.objectweb.asm.ClassVisitor.visitModule(ClassVisitor.java:129) ~[asm-6.1.1.jar:na]
    at org.objectweb.asm.ClassReader.readModule(ClassReader.java:667) ~[asm-6.1.1.jar:na]
    at org.objectweb.asm.ClassReader.accept(ClassReader.java:503) ~[asm-6.1.1.jar:na]
    at org.objectweb.asm.ClassReader.accept(ClassReader.java:355) ~[asm-6.1.1.jar:na]
    at org.eclipse.jetty.annotations.AnnotationParser.scanClass(AnnotationParser.java:974) ~[jetty-annotations-9.2.24.v20180105.jar:9.2.24.v20180105]
    at org.eclipse.jetty.annotations.AnnotationParser.parseJarEntry(AnnotationParser.java:956) ~[jetty-annotations-9.2.24.v20180105.jar:9.2.24.v20180105]
    at org.eclipse.jetty.annotations.AnnotationParser.parseJar(AnnotationParser.java:909) ~[jetty-annotations-9.2.24.v20180105.jar:9.2.24.v20180105]
    ... 6 common frames omitted
Run Code Online (Sandbox Code Playgroud)

等级:

plugins {
    id 'java'
    id 'war'
    id "org.gretty" version "2.2.0" …
Run Code Online (Sandbox Code Playgroud)

java jetty gretty

2
推荐指数
1
解决办法
5933
查看次数

Vaadin:网格重复数据

我写了 Grid,如示例所示。

public class MainView extends VerticalLayout {

    private final UserService userService;
    private Label label;
    private Grid<UserDto> grid;

    public MainView(UserService userService) {
        this.userService = userService;
        initComponents(userService);
    }

    private void initComponents(UserService userService) {
        initMainGrid(userService);
    }

    private void initMainGrid(UserService userService) {
        grid = new Grid<>(UserDto.class);

        grid.setItems(userService.getAll());

        grid.addColumn(UserDto::getId).setHeader("ID");
        grid.addColumn(UserDto::getUsername).setHeader("??? ????????????");
        grid.addColumn(UserDto::getPassword).setHeader("??????");
        grid.addColumn(UserDto::getEmail).setHeader("email");
        grid.addColumn(UserDto::getPhone).setHeader("???????");
        grid.addColumn(UserDto::getActive).setHeader("???????");

        add(grid);
    }
}
Run Code Online (Sandbox Code Playgroud)

但数据重复:

???????  ??? ?????????  ????????????

正如我们所见,数据显示了两次。

请指教,有什么问题吗?如何解决?

java grid vaadin

2
推荐指数
2
解决办法
180
查看次数

Apache PDFBox:编码问题

我有一个 PDF 模板并试图替换其中的一些单词。我使用这个代码:

private PDDocument replaceText(PDDocument document, String searchString, String replacement) throws IOException {
    if (searchString.isEmpty() || replacement.isEmpty()) {
        return document;
    }
    PDPageTree pages = document.getDocumentCatalog().getPages();
    for (PDPage page : pages) {
        PDFStreamParser parser = new PDFStreamParser(page);
        parser.parse();
        List<Object> tokens = parser.getTokens();
        for (int j = 0; j < tokens.size(); j++) {
            Object next = tokens.get(j);
            if (next instanceof Operator) {
                Operator op = (Operator) next;
                //Tj and TJ are the two operators that display strings in a PDF
                if …
Run Code Online (Sandbox Code Playgroud)

java pdfbox

2
推荐指数
1
解决办法
894
查看次数

如何在没有秘密的情况下检查 JWT 令牌到期时间?

在请求中发送之前,我需要检查 JWT 令牌。但是我没有生成这个令牌,我只是通过授权重新接收它,比,我没有秘密。

我用io.jsonwebtoken.jjwt图书馆。

如何使用此库检查令牌到期时间?

java jwt

1
推荐指数
1
解决办法
1229
查看次数

标签 统计

java ×9

gretty ×1

grid ×1

interceptor ×1

jetty ×1

jwt ×1

log4j2 ×1

objectmapper ×1

pdfbox ×1

slf4j ×1

spring ×1

vaadin ×1