RError.com

RError.com Logo RError.com Logo

RError.com Navigation

  • 主页

Mobile menu

Close
  • 主页
  • 系统&网络
    • 热门问题
    • 最新问题
    • 标签
  • Ubuntu
    • 热门问题
    • 最新问题
    • 标签
  • 帮助
主页 / user-410400

Elizaveta's questions

Martin Hope
Elizaveta
Asked: 2022-07-15 04:24:37 +0000 UTC

Stream.reduce java 类比

  • 1

你好)我在java流api中找不到与reduce方法类似的东西,只有这个类比与main方法相比应该有一个区别——我需要避免将整个流减少为一个对象的操作。也许可以使用收集器(因为我需要一个列表作为输出),但我不知道如何做到这一点(身份参数破坏了一切)

我真正想要实现的一个例子:

假设我有一个字符串列表,我需要将它们映射到一个流操作中的对象中,如果下一个元素满足某些条件,则将其拧到第一个。我在说什么:

class SomeProperty {
String someField;
Srring property;
//allArgsConstructor
} 

//THEN

List<SomeProperty> list = List.of(...elements...).stream()
.reduce((x,y)->{
    if(y.equals("i am property!") {
       return new SomeProperty(x, y) ;
    } else {
       return new SomeProperty(x, "default") ;
    } 
}).collect(Collectors.toList());

像这样的东西)如果您有任何想法,请分享!

java
  • 2 个回答
  • 10 Views
Martin Hope
Elizaveta
Asked: 2022-05-17 22:06:39 +0000 UTC

测试中的@ConfigurationProperties 抛出 NullPointer

  • 0

我正在为 Spring Batch 编写集成测试 - 我决定编写一个单独的配置作为测试资源 (*.csv)。这是它的样子:

@ConfigurationProperties(prefix = "resources")
@Data
@TestConfiguration
public class ResourcesTestConfig {
    private Resource first;
    private Resource second;
}
//appliication.yml
resources:
  first: classpath:first.csv
  second: classpath:second.csv
@SpringBootTest
@ActiveProfiles("test")
@Slf4j
@EnableConfigurationProperties
public class SpringBatchApplicationIntegrationTest {
    @Autowired
    private ResourcesTestConfig resourcesConfig;

    @Test
    public void someTest() {... }
}

就这样。资源测试配置 = 空。

从我尝试做的事情来看:

替换@TestConfiguration为@Configurationor @Component,并完全删除。我添加到@EnableConfigurationProperties(classes ... my resourcesconfig class),我还尝试使用注释导入它@Import。用过的@ContextConfiguration(classes... )

不幸的是,它没有用。如何纠正?

堆栈跟踪:

at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:78)
    at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.base/java.lang.reflect.Method.invoke(Method.java:567)
    at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:59)
    at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12)
    at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:56)
    at org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:17)
    at org.junit.runners.ParentRunner$3.evaluate(ParentRunner.java:306)
    at org.junit.runners.BlockJUnit4ClassRunner$1.evaluate(BlockJUnit4ClassRunner.java:100)
    at org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:366)
    at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:103)
    at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:63)
    at org.junit.runners.ParentRunner$4.run(ParentRunner.java:331)
    at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:79)
    at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:329)
    at org.junit.runners.ParentRunner.access$100(ParentRunner.java:66)
    at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:293)
    at org.junit.runners.ParentRunner$3.evaluate(ParentRunner.java:306)
    at org.junit.runners.ParentRunner.run(ParentRunner.java:413)
    at org.junit.runner.JUnitCore.run(JUnitCore.java:137)
    at com.intellij.junit4.JUnit4IdeaTestRunner.startRunnerWithArgs(JUnit4IdeaTestRunner.java:69)
    at com.intellij.rt.junit.IdeaTestRunner$Repeater.startRunnerWithArgs(IdeaTestRunner.java:33)
    at com.intellij.rt.junit.JUnitStarter.prepareStreamsAndStart(JUnitStarter.java:220)
    at com.intellij.rt.junit.JUnitStarter.main(JUnitStarter.java:53)
java
  • 1 个回答
  • 10 Views
Martin Hope
Elizaveta
Asked: 2022-04-30 22:04:06 +0000 UTC

java.lang.NoSuchMethodError:com.mongodb.client.MongoCollection.insertOne

  • 0

我刚开始学习spring-data-mongodb

我的项目是非引导的(我没有从 spring-boot-starter-parent 继承,一切都是老式的方式)

当我尝试保存文档时弹出此错误:

java.lang.NoSuchMethodError: com.mongodb.client.MongoCollection.insertOne(Ljava/lang/Object;)Lcom/mongodb/client/result/InsertOneResult;
        at org.springframework.data.mongodb.core.MongoTemplate.lambda$insertDocument$16(MongoTemplate.java:1464)
        at org.springframework.data.mongodb.core.MongoTemplate.execute(MongoTemplate.java:553)
        at org.springframework.data.mongodb.core.MongoTemplate.insertDocument(MongoTemplate.java:1458)
        at org.springframework.data.mongodb.core.MongoTemplate.doInsert(MongoTemplate.java:1257)
        at org.springframework.data.mongodb.core.MongoTemplate.insert(MongoTemplate.java:1172)
        at org.springframework.data.mongodb.repository.support.SimpleMongoRepository.save(SimpleMongoRepository.java:91)
        at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
        at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
        at java.base/java.lang.reflect.Method.invoke(Method.java:566)
        at org.springframework.data.repository.core.support.RepositoryMethodInvoker$RepositoryFragmentMethodInvoker.lambda$new$0(RepositoryMethodInvoker.java:289)
        at org.springframework.data.repository.core.support.RepositoryMethodInvoker.doInvoke(RepositoryMethodInvoker.java:137)
        at org.springframework.data.repository.core.support.RepositoryMethodInvoker.invoke(RepositoryMethodInvoker.java:121)
        at org.springframework.data.repository.core.support.RepositoryComposition$RepositoryFragments.invoke(RepositoryComposition.java:529)
        at org.springframework.data.repository.core.support.RepositoryComposition.invoke(RepositoryComposition.java:285)
        at org.springframework.data.repository.core.support.RepositoryFactorySupport$ImplementationMethodExecutionInterceptor.invoke(RepositoryFactorySupport.java:599)
        at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:186)
        at org.springframework.data.repository.core.support.QueryExecutorMethodInterceptor.doInvoke(QueryExecutorMethodInterceptor.java:163)
        at org.springframework.data.repository.core.support.QueryExecutorMethodInterceptor.invoke(QueryExecutorMethodInterceptor.java:138)
        at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:186)
        at org.springframework.data.projection.DefaultMethodInvokingMethodInterceptor.invoke(DefaultMethodInvokingMethodInterceptor.java:80)
        at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:186)
        at org.springframework.aop.interceptor.ExposeInvocationInterceptor.invoke(ExposeInvocationInterceptor.java:97)
        at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:186)
        at org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:215)
        at com.sun.proxy.$Proxy31.save(Unknown Source)
        at com.example.nastyabakhshieva.controllers.MainController.createNewUser(MainController.java:34)
        at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
        at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
        at java.base/java.lang.reflect.Method.invoke(Method.java:566)
        at org.springframework.web.method.support.InvocableHandlerMethod.doInvoke(InvocableHandlerMethod.java:197)
        at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:141)
        at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:106)
        at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:894)
        at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:808)
        at org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:87)
        at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:1060)
        at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:962)
        at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:1006)
        at org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:898)
        at javax.servlet.http.HttpServlet.service(HttpServlet.java:626)
        at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:883)
        at javax.servlet.http.HttpServlet.service(HttpServlet.java:733)
        at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:231)
        at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
        at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:53)
        at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)
        at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
        at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:202)
        at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:97)
        at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:542)
        at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:143)
        at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:92)
        at org.apache.catalina.valves.AbstractAccessLogValve.invoke(AbstractAccessLogValve.java:690)
        at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:78)
        at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:343)
        at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:374)
        at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:65)
        at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:888)
        at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1597)
        at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49)
        at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128)
        at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628)
        at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
        at java.base/java.lang.Thread.run(Thread.java:834)

MongoDB 服务器启动

也许我没有在配置中添加一些重要的东西:

package com.example.nastyabakhshieva.config;

import com.example.nastyabakhshieva.repositories.RepositoryPackageMarker;
import com.mongodb.ConnectionString;
import com.mongodb.MongoClientSettings;
import com.mongodb.client.MongoClient;
import com.mongodb.client.MongoClients;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.PropertySource;
import org.springframework.data.mongodb.config.AbstractMongoClientConfiguration;
import org.springframework.data.mongodb.core.MongoTemplate;
import org.springframework.data.mongodb.repository.config.EnableMongoRepositories;

import java.util.Collection;
import java.util.Collections;

@Configuration
@PropertySource("classpath:application.properties")
@EnableMongoRepositories(basePackageClasses = RepositoryPackageMarker.class)
public class MongoConfig extends AbstractMongoClientConfiguration {

    @Value("${mongodb.address}")
    private String mongoAddress;

    @Value("${mongodb.database.name}")
    private String databaseName;

    @Override
    protected String getDatabaseName() {
        return databaseName;
    }

    @Override
    @Bean
    public MongoClient mongoClient() {
        ConnectionString connectionString = new ConnectionString(mongoAddress);
        MongoClientSettings mongoClientSettings = MongoClientSettings.builder()
                .applyConnectionString(connectionString)
                .build();

        return MongoClients.create(mongoClientSettings);
    }

    @Bean
    public MongoTemplate mongoTemplate() {
        return new MongoTemplate(mongoClient(), databaseName);
    }

    @Override
    public Collection<String> getMappingBasePackages() {
        return Collections.singleton("com.example");
    }
}

//application.poperties
mongodb.address=mongodb://localhost:27017
mongodb.database.name=spring-project

这是类和存储库:

package com.example.nastyabakhshieva.repositories;

import com.example.nastyabakhshieva.model.User;
import org.springframework.data.mongodb.repository.MongoRepository;
import org.springframework.stereotype.Repository;

@Repository
public interface UserRepository extends MongoRepository<User, String> {
}

package com.example.nastyabakhshieva.model;

import lombok.Data;
import org.springframework.data.annotation.Id;
import org.springframework.data.mongodb.core.mapping.Document;

@Data
@Document
public class User {

    @Id
    private String id;

    private String firstName;
    private String lastName;
    private int age;
}

我的依赖:

<?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>org.example</groupId>
    <artifactId>spring-project</artifactId>
    <version>1.0-SNAPSHOT</version>
    <packaging>war</packaging>

    <properties>
        <maven.compiler.source>11</maven.compiler.source>
        <maven.compiler.target>11</maven.compiler.target>
        <org.springframework.version>5.3.6</org.springframework.version>
        <java.servlets.api.version>4.0.1</java.servlets.api.version>
        <jackson.version>2.12.3</jackson.version>
        <lombok.version>1.18.20</lombok.version>
        <spring.data.mongodb.version>3.2.0</spring.data.mongodb.version>
        <mongo.java.driver>3.12.8</mongo.java.driver>
    </properties>

    <dependencies>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-web</artifactId>
            <version>${org.springframework.version}</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-webmvc</artifactId>
            <version>${org.springframework.version}</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-context</artifactId>
            <version>${org.springframework.version}</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-context-support</artifactId>
            <version>${org.springframework.version}</version>
        </dependency>
        <dependency>
            <groupId>javax.servlet</groupId>
            <artifactId>javax.servlet-api</artifactId>
            <version>${java.servlets.api.version}</version>
            <scope>provided</scope>
        </dependency>
        <dependency>
            <groupId>com.fasterxml.jackson.core</groupId>
            <artifactId>jackson-core</artifactId>
            <version>${jackson.version}</version>
        </dependency>
        <dependency>
            <groupId>com.fasterxml.jackson.core</groupId>
            <artifactId>jackson-databind</artifactId>
            <version>${jackson.version}</version>
        </dependency>
        <dependency>
            <groupId>org.springframework.data</groupId>
            <artifactId>spring-data-mongodb</artifactId>
            <version>${spring.data.mongodb.version}</version>
        </dependency>
        <dependency>
            <groupId>org.mongodb</groupId>
            <artifactId>mongo-java-driver</artifactId>
            <version>${mongo.java.driver}</version>
        </dependency>
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <version>${lombok.version}</version>
            <scope>provided</scope>
        </dependency>
    </dependencies>

    <repositories>
        <repository>
            <id>spring-milestone</id>
            <name>Spring Maven MILESTONE Repository</name>
            <url>https://repo.spring.io/libs-milestone</url>
        </repository>
    </repositories>

</project>

如果我忘记了什么,请告诉我

java
  • 2 个回答
  • 10 Views
Martin Hope
Elizaveta
Asked: 2022-04-21 17:05:06 +0000 UTC

git rebase -i 如何在没有冲突的情况下进行 rebase

  • 1

大家好!一个问题。让我们开始介绍

我在做某种诡计。在它得到优化之前,我正在从这个分支创建另一个分支以继续工作。例如:一个分支被调用CreateFeature- 它是来自该分支的拉取请求master;在此分支被批准合并之前,我将转移到一个新分支以做其他有用的事情。也就是说,在一个分支上CreateFeature,我写git checkout -b NewFeature;

在做了一些工作后NewFeature,该分支机构获得了CreateFeature批准。所以,我切换到它并执行它git rebase -i (squash)- 我将所有提交整合到一个。然后我把它上传到master。

所以,当分支被批准时NewFeature,我需要做同样的事情:重新设置分支master并执行git squash;

我现在也有类似的情况。我正在尝试将提交合并为一个并重新设置为 master,但是重新设置的每一步都会导致无法控制的冲突。git rebase可能是因为我已经建立了一个新分支后进行了清理。

告诉我,是否有任何选项可以强制新分支重写它的来源分支的历史git rebase?之类(now on NewBranch) git pull --force OldBranch的,然后在没有冲突的情况下压缩提交?这很痛苦,有大量的提交,而且很难解决每个提交的冲突

linux
  • 3 个回答
  • 10 Views
Martin Hope
Elizaveta
Asked: 2022-04-20 17:22:20 +0000 UTC

如何配置 Swagger Spring(非引导)

  • 3

我的配置如下所示:

        <dependency>
            <groupId>io.springfox</groupId>
            <artifactId>springfox-swagger-ui</artifactId>
            <version>${swagger.docs.version}</version>
            <scope>compile</scope>
        </dependency>
        <dependency>
            <groupId>io.springfox</groupId>
            <artifactId>springfox-swagger2</artifactId>
            <version>${swagger.docs.version}</version>
            <scope>compile</scope>
        </dependency>
//P.S. <swagger.docs.version>2.9.2</swagger.docs.version>
@Configuration
@ComponentScan(basePackageClasses = {ControllerPackageMarker.class, MappersPackageMarker.class})
@EnableWebMvc
@EnableSwagger2
@PropertySource("classpath:media.upload.properties")
public class WebMvcConfig implements WebMvcConfigurer {

    @Value("${upload.path}")
    private String path;

    @Value("${max.file.size}")
    private long maxFileSize;

    @Bean
    public BCryptPasswordEncoder passwordEncoder() {
        return new BCryptPasswordEncoder(12);
    }

    @Override
    public void addArgumentResolvers(List<HandlerMethodArgumentResolver> resolvers) {
        resolvers.add(new AuthenticationPrincipalArgumentResolver());
    }

    @Bean(name = "multipartResolver")
    public CommonsMultipartResolver multipartResolver() {
        CommonsMultipartResolver multipartResolver = new CommonsMultipartResolver();
        multipartResolver.setMaxUploadSize(maxFileSize);
        return multipartResolver;
    }

    @Override
    public void addResourceHandlers(ResourceHandlerRegistry registry) {
        boolean isWindows = System.getProperty("os.name").contains("Windows");

        registry.addResourceHandler("/img/**")
                .addResourceLocations(isWindows ? "file:///" + path : "file://" + path);
        registry.addResourceHandler("swagger-ui.html")
                .addResourceLocations("classpath:/META-INF/resources/");
        registry.addResourceHandler("/webjars/**")
                .addResourceLocations("classpath:/META-INF/resources/webjars/");
    }

    @Bean
    public Docket api() {
        return new Docket(DocumentationType.SWAGGER_2)
                .select()
                .apis(RequestHandlerSelectors.any())
                .paths(PathSelectors.any())
                .build();
    }
}

根据文档,pom中的bean和依赖项就足够了,但是当我点击链接localhost:8080/swagger-ui.html时它什么也没显示((

在安全配置中,我指出antMathers("/swagger-ui.html").permitAll();

这是结果:

在此处输入图像描述

从屏幕截图中可以看出,它让我进入页面,但页面完全是空的

(所有控制器到位)

UPD:/v2/api-docs工作,返回 json

在此处输入图像描述

以下网址 (404) 不起作用:

app_root/v2/swagger-ui/
app_root/swagger-ui/
java
  • 2 个回答
  • 10 Views
Martin Hope
Elizaveta
Asked: 2022-03-31 19:05:41 +0000 UTC

400错误请求Spring mvc

  • 1

有这个方法:

@RequestMapping(method = {RequestMethod.PATCH, RequestMethod.POST})
    @PreAuthorize("hasRole('ADMIN')")
    public TaskOutDto updateCreateTask(@RequestBody(required = false) @Valid Optional<TaskUpdateInDto> updateTask,
                                       @RequestBody(required = false) @Valid Optional<TaskCreateInDto> createTask) {

        return updateTask
                .map(mapper::fromDto)
                .map(mapper::toDto)
                .orElse(createTask
                        .map(mapper::fromDto)
                        .map(mapper::toDto)
                        .orElseThrow(NullPointerException::new));
}

在其中,我只是进行映射并返回结果。但不幸的是,请求甚至没有进入方法——立即抛出错误 400。如果你删除 @Valid 注释,它仍然会抛出 400

这是邮递员的截图:

在此处输入图像描述

spring
  • 1 个回答
  • 10 Views
Martin Hope
Elizaveta
Asked: 2022-03-24 22:53:43 +0000 UTC

CORS spring 安全设置或单地址过滤器忽略

  • 3

以下是发生的情况:服务器接受 jwt 身份验证令牌,如果令牌存在于标头中,它首先检查令牌,然后才允许它访问资源,甚至是公共资源。并且,如果令牌过期或无效,则服务器会抛出身份验证错误并向客户端返回 401:

@RequiredArgsConstructor
public class JwtTokenFilter extends GenericFilterBean {

    private final JwtTokenProvider jwtTokenProvider;

    @Override
    public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
        String token = jwtTokenProvider.retrieveAccessToken((HttpServletRequest) servletRequest);

        try {
            if (token != null && jwtTokenProvider.validateToken(token)) {
                Authentication authentication = jwtTokenProvider.getAuthentication(token);

                if (authentication != null) {
                    SecurityContextHolder.getContext().setAuthentication(authentication);
                }
            }
        } catch (JwtAuthenticationException ex) {
            HttpServletResponse httpServletResponse = (HttpServletResponse) servletResponse;
            httpServletResponse.sendError(HttpStatus.UNAUTHORIZED.value(), ex.getMessage());
            return;
        }
        filterChain.doFilter(servletRequest, servletResponse);
    }
}
=========================
@RequiredArgsConstructor
public class JwtConfigurer extends SecurityConfigurerAdapter<DefaultSecurityFilterChain, HttpSecurity> {
    private final JwtTokenProvider provider;

    @Override
    public void configure(HttpSecurity builder) throws Exception {
        JwtTokenFilter filter = new JwtTokenFilter(provider);
        builder.addFilterBefore(filter, UsernamePasswordAuthenticationFilter.class);
    }
}

这是通过覆盖方法解决的WebSecurityConfigurerAdapter:

    @Override
    public void configure(WebSecurity web) throws Exception {
        web.ignoring().antMatchers("/publuc_urls");
    }

很好,但是当尝试从第三方站点(在我的情况下,是发出 ajax 请求的客户端)获取资源时 - 发生错误

错误

虽然,我提请您注意,对于上面配置中未忽略的地址,只要它CorsFilter存在,一切正常。这是配置:

    @Override
    protected void configure(HttpSecurity http) throws Exception {
        http
                .cors()
                .and()
                .addFilterBefore(new CorsFilter(corsConfigurationSource()), SessionManagementFilter.class)
                .httpBasic().disable()
                .csrf().disable()
                .sessionManagement().sessionCreationPolicy(SessionCreationPolicy.STATELESS)
                .and()
                .authorizeRequests()
                .antMatchers("/hello", "/login", "/register", "/refresh_token").permitAll()
                .anyRequest().authenticated()
                .and()
                .apply(new JwtConfigurer(provider));
    }

    @Bean
    public CorsConfigurationSource corsConfigurationSource() {
        UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource();
        CorsConfiguration config = new CorsConfiguration();
        config.addAllowedMethod("*");
        source.registerCorsConfiguration("/**", config.applyPermitDefaultValues());
        return source;
    }

也就是说,如果这个地址被忽略,那么它不仅会飞过 jwt 过滤器,还会飞过 cors 过滤器。

需要实现一个刷新令牌(客户端向服务器发送一个过期的访问令牌和一个刷新令牌)。它无法通过令牌过滤器,因为标头中的访问令牌已过期,并且它无法通过 cors 过滤器,因为请求是从左侧站点发出的。

可以做些什么呢?

java
  • 1 个回答
  • 10 Views
Martin Hope
Elizaveta
Asked: 2022-03-23 23:04:14 +0000 UTC

jquery sortable如何将新排序的列表发送到远程服务器

  • 1

假设有一个可拖动列表的简单实现:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <link href="https://cdn.jsdelivr.net/npm/bootstrap@5.0.0-beta2/dist/css/bootstrap.min.css" rel="stylesheet" integrity="sha384-BmbxuPwQa2lc/FVzBcNJ7UAyJxM6wuqIj61tLrc4wSX0szH/Ev+nYRRuWlolflfl" crossorigin="anonymous">
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.5.1/jquery.min.js"></script>
    <script src="https://code.jquery.com/jquery-1.12.4.js"></script>
    <script src="https://code.jquery.com/ui/1.12.1/jquery-ui.js"></script>
    <title>Title</title>
</head>
<body>
<ul class="list-group">
    <li class="list-group-item">An item</li>
    <li class="list-group-item">A second item</li>
    <li class="list-group-item">A third item</li>
    <li class="list-group-item">A fourth item</li>
    <li class="list-group-item">And a fifth one</li>
</ul>
<script>
    $(".list-group").sortable();
</script>
</body>
</html>

服务器上有一个数据库(sql):

create table items(
int id auto_increment primary key,
item varchar (100) not null,
position int default id
)

我可以使用 ajax 从服务器接收此列表作为数组,按位置排序,然后将其推送到页面上。但是如果我拖放一些元素并想保持顺序怎么办?如何将此列表发送回服务器,仅已更新?

也许有一些函数可以将列表的全部内容转换为 json?

javascript
  • 1 个回答
  • 10 Views
Martin Hope
Elizaveta
Asked: 2022-03-19 23:10:23 +0000 UTC

如何处理自定义 JwtAuthException Spring 安全性

  • 1

我有 JwtTokenProvider:

@Component
@PropertySource("classpath:jwt.properties")
@RequiredArgsConstructor
public class JwtTokenProvider {
//some code ...
   public boolean validateToken(String token) {
        try {
            Jws<Claims> claimsJws = Jwts.parser()
                    .setSigningKey(secretKey)
                    .parseClaimsJws(token);
            return !claimsJws.getBody().getExpiration().before(new Date());
        } catch (JwtException | IllegalArgumentException e) {
            throw new JwtAuthenticationException("JWT token expired or invalid!");
        }
    }
}

这是一个正常组件,如果令牌“腐烂”,结果会引发异常

很明显,如果您使用损坏的令牌联系服务器,它将抛出异常 - 但会出现 500 错误。如何捕获它以便返回 401?而且只有这个例外,403我需要保存

以下是一些相关的类:

  1. 筛选
@RequiredArgsConstructor
public class JwtTokenFilter extends GenericFilterBean {

    private final JwtTokenProvider jwtTokenProvider;

    @Override
    public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
        String token = jwtTokenProvider.retrieveToken((HttpServletRequest) servletRequest);

        if (token != null && jwtTokenProvider.validateToken(token)) {
            Authentication authentication = jwtTokenProvider.getAuthentication(token);

            if (authentication != null) {
                SecurityContextHolder.getContext().setAuthentication(authentication);
            }
        }
        filterChain.doFilter(servletRequest, servletResponse);
    }
}

2.配置

@RequiredArgsConstructor
public class JwtConfigurer extends SecurityConfigurerAdapter<DefaultSecurityFilterChain, HttpSecurity> {
    private final JwtTokenProvider provider;

    @Override
    public void configure(HttpSecurity builder) throws Exception {
        JwtTokenFilter filter = new JwtTokenFilter(provider);
        builder.addFilterBefore(filter, UsernamePasswordAuthenticationFilter.class);
    }
}
==========================
@Configuration
@EnableWebSecurity
@ComponentScan(basePackageClasses = {SecurityPackageMarker.class})
@EnableGlobalMethodSecurity(prePostEnabled = true)
@RequiredArgsConstructor
public class SecurityConfig extends WebSecurityConfigurerAdapter {

    private final JwtTokenProvider provider;

    @Override
    protected void configure(HttpSecurity http) throws Exception {
        http
                .cors()
                .and()
                .addFilterBefore(new CorsFilter(corsConfigurationSource()), SessionManagementFilter.class)
                .httpBasic().disable()
                .csrf().disable()
                .sessionManagement().sessionCreationPolicy(SessionCreationPolicy.STATELESS)
                .and()
                .authorizeRequests()
                .antMatchers("/hello", "/login", "/register").permitAll()
                .anyRequest().authenticated()
                .and()
                .apply(new JwtConfigurer(provider));
    }

    @Bean
    @Override
    public AuthenticationManager authenticationManagerBean() throws Exception {
        return super.authenticationManagerBean();
    }

    @Bean
    public CorsConfigurationSource corsConfigurationSource() {
        UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource();
        CorsConfiguration config = new CorsConfiguration();
        config.addAllowedMethod("*");
        source.registerCorsConfiguration("/**", config.applyPermitDefaultValues());
        return source;
    }
}
  1. 例外:
public class JwtAuthenticationException extends AuthenticationException {
    public JwtAuthenticationException(String explanation) {
        super(explanation);
    }
}

4.控制器:

@PostMapping("/login")
    @ResponseStatus(HttpStatus.OK)
    public Properties login(@RequestBody AuthenticationInDto dto) {
        try {
            String username = dto.getUsername();
            String password= dto.getPassword();
            authenticationManager.authenticate(new UsernamePasswordAuthenticationToken(username, password));
            Optional<User> user = userService.findByUsername(username);

            if (!user.isPresent()) {
                throw new UsernameNotFoundException("User with username: " + username + " not found");
            }

            String token = provider.createToken(username, user.get().getRole());

            Properties response = new Properties();
            response.setProperty("jwtToken", token);

            return response;
        } catch (AuthenticationException e) {
            throw new BadCredentialsException(e.getMessage());
        }
    }

但是,尽管如此,它并没有捕获我的异常(不转发它BadCredentialsException) - 服务器崩溃并出现错误 500,即使我有一个处理程序:

@RestControllerAdvice
public class ControllersExceptionHandler extends ResponseEntityExceptionHandler {

    @ExceptionHandler(BadCredentialsException.class)
    @ResponseStatus(HttpStatus.UNAUTHORIZED)
    public ErrorDto handleBadCredentials(BadCredentialsException ex) {
        return new ErrorDto(HttpStatus.UNAUTHORIZED.value(),
                            ex.getMessage());
    }

    @ExceptionHandler(RegistrationException.class)
    @ResponseStatus(HttpStatus.BAD_REQUEST)
    public ErrorDto handleRegistrationException(RegistrationException ex) {
        return new ErrorDto(HttpStatus.BAD_REQUEST.value(),
                            ex.getMessage());
    }
}
java
  • 1 个回答
  • 10 Views
Martin Hope
Elizaveta
Asked: 2022-03-19 21:43:22 +0000 UTC

Spring handleBindException 如何覆盖

  • 0

我正在尝试覆盖一个方法:

@RestControllerAdvice
public class ControllersExceptionHandler extends ResponseEntityExceptionHandler {

    @Override
    protected ResponseEntity<Object> handleBindException(BindException ex, HttpHeaders headers, HttpStatus status, WebRequest request) {
        return handleExceptionInternal(ex, new ErrorDto(HttpStatus.BAD_REQUEST.value(),
                "Invalid credentials! Password should has min 8 symbols and all fields are required"),
                headers, status, request);
    }
}
==============================
@Data
@AllArgsConstructor
public class ErrorDto {
    private int status;
    private String message;
}

我试图覆盖它,以便它向客户端返回一个清晰的响应,但结果是这样的:

在此处输入图像描述

而且,好像没有试图用 ResponseEntity 变态,它总是返回空 json。如何纠正?

java
  • 1 个回答
  • 10 Views
Martin Hope
Elizaveta
Asked: 2022-03-18 17:33:41 +0000 UTC

无法解析符号“JwtConfigurer”IntellijDEA(windows10)

  • 0

在此处输入图像描述

如您所见,它们位于同一个模块中(左侧)。为什么想法看不到他们?

在此之前,一切都运行良好——唯一导致一切崩溃的变化是切换到另一个分支。最不可思议的是,应用程序在Tomcat服务器上正常启动并正常运行

java
  • 1 个回答
  • 10 Views
Martin Hope
Elizaveta
Asked: 2022-03-17 21:22:35 +0000 UTC

创建名为“liquibase”的 bean 时出错 java.lang.ClassCastException:java.base/java.time.LocalDateTime 无法转换为 java.base/java.lang.String

  • 1

第一次运行后,它工作正常,然后崩溃(在第一次运行之后,我的意思是,从数据库中删除所有表并再次创建它们)

我正在使用 spring jpa 2.4.5 + liquibase 3.4.1

完整的堆栈跟踪:

org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'liquibase' defined in class path resource [com/coherentsolutions/nastyabakhshieva/config/jpa/DataJpaConfig.class]: Invocation of init method failed; nested exception is java.lang.ClassCastException: java.base/java.time.LocalDateTime cannot be cast to java.base/java.lang.String
        at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1786)
        at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:602)
        at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:524)
        at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:335)
        at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234)
        at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:333)
        at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:208)
        at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:944)
        at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:917)
        at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:582)
        at org.springframework.web.context.ContextLoader.configureAndRefreshWebApplicationContext(ContextLoader.java:401)
        at org.springframework.web.context.ContextLoader.initWebApplicationContext(ContextLoader.java:292)
        at org.springframework.web.context.ContextLoaderListener.contextInitialized(ContextLoaderListener.java:103)
        at org.apache.catalina.core.StandardContext.listenerStart(StandardContext.java:4714)
        at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5177)
        at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:183)
        at org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:717)
        at org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:690)
        at org.apache.catalina.core.StandardHost.addChild(StandardHost.java:706)
        at org.apache.catalina.startup.HostConfig.manageApp(HostConfig.java:1727)
        at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
        at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
        at java.base/java.lang.reflect.Method.invoke(Method.java:564)
        at org.apache.tomcat.util.modeler.BaseModelMBean.invoke(BaseModelMBean.java:288)
        at java.management/com.sun.jmx.interceptor.DefaultMBeanServerInterceptor.invoke(DefaultMBeanServerInterceptor.java:809)
        at java.management/com.sun.jmx.mbeanserver.JmxMBeanServer.invoke(JmxMBeanServer.java:801)
        at org.apache.catalina.mbeans.MBeanFactory.createStandardContext(MBeanFactory.java:459)
        at org.apache.catalina.mbeans.MBeanFactory.createStandardContext(MBeanFactory.java:408)
        at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
        at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
        at java.base/java.lang.reflect.Method.invoke(Method.java:564)
        at org.apache.tomcat.util.modeler.BaseModelMBean.invoke(BaseModelMBean.java:288)
        at java.management/com.sun.jmx.interceptor.DefaultMBeanServerInterceptor.invoke(DefaultMBeanServerInterceptor.java:809)
        at java.management/com.sun.jmx.mbeanserver.JmxMBeanServer.invoke(JmxMBeanServer.java:801)
        at java.management/com.sun.jmx.remote.security.MBeanServerAccessController.invoke(MBeanServerAccessController.java:468)
        at java.management.rmi/javax.management.remote.rmi.RMIConnectionImpl.doOperation(RMIConnectionImpl.java:1466)
        at java.management.rmi/javax.management.remote.rmi.RMIConnectionImpl.access$300(RMIConnectionImpl.java:75)
        at java.management.rmi/javax.management.remote.rmi.RMIConnectionImpl$PrivilegedOperation.run(RMIConnectionImpl.java:1307)
        at java.base/java.security.AccessController.doPrivileged(Native Method)
        at java.management.rmi/javax.management.remote.rmi.RMIConnectionImpl.doPrivilegedOperation(RMIConnectionImpl.java:1406)
        at java.management.rmi/javax.management.remote.rmi.RMIConnectionImpl.invoke(RMIConnectionImpl.java:827)
        at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
        at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
        at java.base/java.lang.reflect.Method.invoke(Method.java:564)
        at java.rmi/sun.rmi.server.UnicastServerRef.dispatch(UnicastServerRef.java:359)
        at java.rmi/sun.rmi.transport.Transport$1.run(Transport.java:200)
        at java.rmi/sun.rmi.transport.Transport$1.run(Transport.java:197)
        at java.base/java.security.AccessController.doPrivileged(Native Method)
        at java.rmi/sun.rmi.transport.Transport.serviceCall(Transport.java:196)
        at java.rmi/sun.rmi.transport.tcp.TCPTransport.handleMessages(TCPTransport.java:567)
        at java.rmi/sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run0(TCPTransport.java:800)
        at java.rmi/sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.lambda$run$0(TCPTransport.java:682)
        at java.base/java.security.AccessController.doPrivileged(Native Method)
        at java.rmi/sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run(TCPTransport.java:681)
        at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1167)
        at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:641)
        at java.base/java.lang.Thread.run(Thread.java:844)
    Caused by: java.lang.ClassCastException: java.base/java.time.LocalDateTime cannot be cast to java.base/java.lang.String
        at liquibase.changelog.StandardChangeLogHistoryService.getRanChangeSets(StandardChangeLogHistoryService.java:253)
        at liquibase.changelog.AbstractChangeLogHistoryService.upgradeChecksums(AbstractChangeLogHistoryService.java:63)
        at liquibase.changelog.StandardChangeLogHistoryService.upgradeChecksums(StandardChangeLogHistoryService.java:224)
        at liquibase.Liquibase.checkLiquibaseTables(Liquibase.java:1076)
        at liquibase.Liquibase.update(Liquibase.java:203)
        at liquibase.Liquibase.update(Liquibase.java:190)
        at liquibase.integration.spring.SpringLiquibase.performUpdate(SpringLiquibase.java:434)
        at liquibase.integration.spring.SpringLiquibase.afterPropertiesSet(SpringLiquibase.java:391)
        at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1845)
        at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1782)
        ... 59 more
=====================================================
17-Mar-2021 16:13:29.858 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Server version name:   Apache Tomcat/9.0.41
17-Mar-2021 16:13:29.859 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Server built:          Dec 3 2020 11:43:00 UTC
17-Mar-2021 16:13:29.860 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Server version number: 9.0.41.0
17-Mar-2021 16:13:29.860 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log OS Name:               Windows 10
17-Mar-2021 16:13:29.860 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log OS Version:            10.0
17-Mar-2021 16:13:29.860 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Architecture:          amd64
17-Mar-2021 16:13:29.860 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Java Home:             C:\Program Files\Java\jdk-9.0.4
17-Mar-2021 16:13:29.860 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log JVM Version:           9.0.4+11
17-Mar-2021 16:13:29.860 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log JVM Vendor:            Oracle Corporation
17-Mar-2021 16:13:29.860 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log CATALINA_BASE:         C:\Users\nastyabakhshieva\AppData\Local\JetBrains\IntelliJIdea2020.3\tomcat\19574d3a-3da5-4a96-b76d-2045b5ab354e
17-Mar-2021 16:13:29.860 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log CATALINA_HOME:         C:\Program Files\Apache Software Foundation\Tomcat 9.0
17-Mar-2021 16:13:29.861 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: --add-opens=java.base/java.lang=ALL-UNNAMED
17-Mar-2021 16:13:29.861 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: --add-opens=java.base/java.io=ALL-UNNAMED
17-Mar-2021 16:13:29.861 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: --add-opens=java.rmi/sun.rmi.transport=ALL-UNNAMED
17-Mar-2021 16:13:29.861 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: -Djava.util.logging.config.file=C:\Users\nastyabakhshieva\AppData\Local\JetBrains\IntelliJIdea2020.3\tomcat\19574d3a-3da5-4a96-b76d-2045b5ab354e\conf\logging.properties
17-Mar-2021 16:13:29.861 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: -Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager
17-Mar-2021 16:13:29.861 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: -Dcom.sun.management.jmxremote=
17-Mar-2021 16:13:29.861 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: -Dcom.sun.management.jmxremote.port=1099
17-Mar-2021 16:13:29.861 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: -Dcom.sun.management.jmxremote.ssl=false
17-Mar-2021 16:13:29.861 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: -Dcom.sun.management.jmxremote.password.file=C:\Users\nastyabakhshieva\AppData\Local\JetBrains\IntelliJIdea2020.3\tomcat\19574d3a-3da5-4a96-b76d-2045b5ab354e\jmxremote.password
17-Mar-2021 16:13:29.861 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: -Dcom.sun.management.jmxremote.access.file=C:\Users\nastyabakhshieva\AppData\Local\JetBrains\IntelliJIdea2020.3\tomcat\19574d3a-3da5-4a96-b76d-2045b5ab354e\jmxremote.access
17-Mar-2021 16:13:29.862 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: -Djava.rmi.server.hostname=127.0.0.1
17-Mar-2021 16:13:29.862 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: -Djdk.tls.ephemeralDHKeySize=2048
17-Mar-2021 16:13:29.862 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: -Djava.protocol.handler.pkgs=org.apache.catalina.webresources
17-Mar-2021 16:13:29.862 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: -Dignore.endorsed.dirs=
17-Mar-2021 16:13:29.862 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: -Dcatalina.base=C:\Users\nastyabakhshieva\AppData\Local\JetBrains\IntelliJIdea2020.3\tomcat\19574d3a-3da5-4a96-b76d-2045b5ab354e
17-Mar-2021 16:13:29.862 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: -Dcatalina.home=C:\Program Files\Apache Software Foundation\Tomcat 9.0
17-Mar-2021 16:13:29.862 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: -Djava.io.tmpdir=C:\Program Files\Apache Software Foundation\Tomcat 9.0\temp
17-Mar-2021 16:13:29.867 INFO [main] org.apache.catalina.core.AprLifecycleListener.lifecycleEvent The Apache Tomcat Native library which allows using OpenSSL was not found on the java.library.path: [C:\Program Files\Java\jdk-9.0.4\bin;C:\Windows\Sun\Java\bin;C:\Windows\system32;C:\Windows;C:\Program Files (x86)\Common Files\Oracle\Java\javapath;C:\Windows\system32;C:\Windows;C:\Windows\System32\Wbem;C:\Windows\System32\WindowsPowerShell\v1.0\;C:\Windows\System32\OpenSSH\;C:\Program Files\Git\cmd;C:\Program Files\MySQL\MySQL Shell 8.0\bin\;C:\Users\nastyabakhshieva\AppData\Local\Microsoft\WindowsApps;C:\Program Files\JetBrains\IntelliJ IDEA 2020.3.1\bin;C:\Program Files\Java\jdk1.8.0_281\bin;C:\Program Files\Maven\bin;C:\Users\nastyabakhshieva\AppData\Local\atom\bin;.]
17-Mar-2021 16:13:29.988 INFO [main] org.apache.coyote.AbstractProtocol.init Initializing ProtocolHandler ["http-nio-8080"]
17-Mar-2021 16:13:30.012 INFO [main] org.apache.catalina.startup.Catalina.load Server initialization in [260] milliseconds
17-Mar-2021 16:13:30.040 INFO [main] org.apache.catalina.core.StandardService.startInternal Starting service [Catalina]
17-Mar-2021 16:13:30.040 INFO [main] org.apache.catalina.core.StandardEngine.startInternal Starting Servlet engine: [Apache Tomcat/9.0.41]
17-Mar-2021 16:13:30.046 INFO [main] org.apache.coyote.AbstractProtocol.start Starting ProtocolHandler ["http-nio-8080"]
17-Mar-2021 16:13:30.051 INFO [main] org.apache.catalina.startup.Catalina.start Server startup in [38] milliseconds
Connected to server
[2021-03-17 04:13:30,410] Artifact web-application:war exploded: Artifact is being deployed, please wait...
17-Mar-2021 16:13:32.397 INFO [RMI TCP Connection(3)-127.0.0.1] org.apache.jasper.servlet.TldScanner.scanJars At least one JAR was scanned for TLDs yet contained no TLDs. Enable debug logging for this logger for a complete list of JARs that were scanned but no TLDs were found in them. Skipping unneeded JARs during scanning can improve startup time and JSP compilation time.
SLF4J: Failed to load class "org.slf4j.impl.StaticLoggerBinder".
SLF4J: Defaulting to no-operation (NOP) logger implementation
SLF4J: See http://www.slf4j.org/codes.html#StaticLoggerBinder for further details.
Loading class `com.mysql.jdbc.Driver'. This is deprecated. The new driver class is `com.mysql.cj.jdbc.Driver'. The driver is automatically registered via the SPI and manual loading of the driver class is generally unnecessary.
17-Mar-2021 16:13:33.454 INFO [RMI TCP Connection(3)-127.0.0.1] org.hibernate.jpa.internal.util.LogHelper.logPersistenceUnitInformation HHH000204: Processing PersistenceUnitInfo [name: default]
17-Mar-2021 16:13:33.544 INFO [RMI TCP Connection(3)-127.0.0.1] org.hibernate.Version.logVersion HHH000412: Hibernate ORM core version 5.4.28.Final
17-Mar-2021 16:13:33.777 INFO [RMI TCP Connection(3)-127.0.0.1] org.hibernate.annotations.common.reflection.java.JavaReflectionManager.<clinit> HCANN000001: Hibernate Commons Annotations {5.1.2.Final}
17-Mar-2021 16:13:34.255 INFO [RMI TCP Connection(3)-127.0.0.1] org.hibernate.dialect.Dialect.<init> HHH000400: Using dialect: org.hibernate.dialect.MySQL8Dialect
17-Mar-2021 16:13:34.659 INFO [RMI TCP Connection(3)-127.0.0.1] org.hibernate.validator.internal.util.Version.<clinit> HV000001: Hibernate Validator 6.0.16.Final
17-Mar-2021 16:13:35.368 INFO [RMI TCP Connection(3)-127.0.0.1] org.hibernate.engine.transaction.jta.platform.internal.JtaPlatformInitiator.initiateService HHH000490: Using JtaPlatform implementation: [org.hibernate.engine.transaction.jta.platform.internal.NoJtaPlatform]
INFO 3/17/21, 4:13 PM: liquibase: Successfully acquired change log lock
INFO 3/17/21, 4:13 PM: liquibase: Reading from java_spring.DATABASECHANGELOG
INFO 3/17/21, 4:13 PM: liquibase: Successfully released change log lock
17-Mar-2021 16:13:37.256 SEVERE [RMI TCP Connection(3)-127.0.0.1] org.apache.catalina.core.StandardContext.startInternal One or more listeners failed to start. Full details will be found in the appropriate container log file
17-Mar-2021 16:13:37.290 SEVERE [RMI TCP Connection(3)-127.0.0.1] org.apache.catalina.core.StandardContext.startInternal Context [] startup failed due to previous errors
17-Mar-2021 16:13:37.301 WARNING [RMI TCP Connection(3)-127.0.0.1] org.apache.catalina.loader.WebappClassLoaderBase.clearReferencesJdbc The web application [ROOT] registered the JDBC driver [com.mysql.cj.jdbc.Driver] but failed to unregister it when the web application was stopped. To prevent a memory leak, the JDBC Driver has been forcibly unregistered.
[2021-03-17 04:13:37,308] Artifact web-application:war exploded: Error during artifact deployment. See server log for details.
17-Mar-2021 16:13:40.053 INFO [Catalina-utility-1] org.apache.catalina.startup.HostConfig.deployDirectory Deploying web application directory [C:\Program Files\Apache Software Foundation\Tomcat 9.0\webapps\manager]
17-Mar-2021 16:13:40.091 INFO [Catalina-utility-1] org.apache.catalina.startup.HostConfig.deployDirectory Deployment of web application directory [C:\Program Files\Apache Software Foundation\Tomcat 9.0\webapps\manager] has finished in [38] ms
17-Mar-2021 16:13:40.497 INFO [mysql-cj-abandoned-connection-cleanup] org.apache.catalina.loader.WebappClassLoaderBase.checkStateForResourceLoading Illegal access: this web application instance has been stopped already. Could not load []. The following stack trace is thrown for debugging purposes as well as to attempt to terminate the thread which caused the illegal access.
    java.lang.IllegalStateException: Illegal access: this web application instance has been stopped already. Could not load []. The following stack trace is thrown for debugging purposes as well as to attempt to terminate the thread which caused the illegal access.
        at org.apache.catalina.loader.WebappClassLoaderBase.checkStateForResourceLoading(WebappClassLoaderBase.java:1385)
        at org.apache.catalina.loader.WebappClassLoaderBase.getResource(WebappClassLoaderBase.java:1038)
        at com.mysql.cj.jdbc.AbandonedConnectionCleanupThread.checkThreadContextClassLoader(AbandonedConnectionCleanupThread.java:123)
        at com.mysql.cj.jdbc.AbandonedConnectionCleanupThread.run(AbandonedConnectionCleanupThread.java:90)
        at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1167)
        at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:641)
        at java.base/java.lang.Thread.run(Thread.java:844)
"C:\Program Files\Apache Software Foundation\Tomcat 9.0\bin\catalina.bat" stop
Using CATALINA_BASE:   "C:\Users\nastyabakhshieva\AppData\Local\JetBrains\IntelliJIdea2020.3\tomcat\19574d3a-3da5-4a96-b76d-2045b5ab354e"
Using CATALINA_HOME:   "C:\Program Files\Apache Software Foundation\Tomcat 9.0"
Using CATALINA_TMPDIR: "C:\Program Files\Apache Software Foundation\Tomcat 9.0\temp"
Using JRE_HOME:        "C:\Program Files\Java\jdk-9.0.4"
Using CLASSPATH:       "C:\Program Files\Apache Software Foundation\Tomcat 9.0\bin\bootstrap.jar;C:\Program Files\Apache Software Foundation\Tomcat 9.0\bin\tomcat-juli.jar"
Using CATALINA_OPTS:   ""
17-Mar-2021 16:15:17.436 SEVERE [main] org.apache.catalina.startup.Catalina.stopServer No shutdown port configured. Shut down server through OS signal. Server not shut down.
Disconnected from server

变更日志:

<databaseChangeLog
        xmlns="http://www.liquibase.org/xml/ns/dbchangelog"
        xmlns:ext="http://www.liquibase.org/xml/ns/dbchangelog-ext"
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xsi:schemaLocation="http://www.liquibase.org/xml/ns/dbchangelog-ext
   http://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-ext.xsd
   http://www.liquibase.org/xml/ns/dbchangelog
   http://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-3.4.xsd">

    <changeSet id="1.0.0" author="nastya.bakhshieva">
        <sql>
            create table users(
                user_id    bigint          not null  auto_increment,
                first_name varchar(100)    not null,
                last_name  varchar(100)    not null,
                status     varchar(30)     not null  default 'ACTIVE',
                role       varchar(30)     not null  default 'ROLE_USER',
                username   varchar(200)    not null  unique,
                password   varchar(200)    not null,
                constraint pk_user_user_id primary   key(user_id)
            );
        </sql>
        <rollback>
            drop table if exists users;
        </rollback>
    </changeSet>

</databaseChangeLog>

实体:

import lombok.Data;
import lombok.NoArgsConstructor;

import javax.persistence.*;

@Entity
@Table(name = "users")
@Data
@NoArgsConstructor
public class User {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Column(name = "user_id")
    private Long id;

    @Column(name = "username")
    private String username;

    @Column(name = "first_name")
    private String firstName;

    @Column(name = "last_name")
    private String lastName;

    @Column(name = "password")
    private String password;

    @Enumerated(value = EnumType.STRING)
    @Column(name = "status")
    private Status status;

    @Enumerated(value = EnumType.STRING)
    @Column(name = "role")
    private Role role;
}

db.properties:

spring.data.driver-classname=com.mysql.jdbc.Driver
spring.data.url=jdbc:mysql://localhost:3306/java_spring?serverTimezone=UTC
spring.data.username=root
spring.data.password=root

配置:

@Configuration
@EnableTransactionManagement
@EnableJpaRepositories("com.example.repositories")
@PropertySource("classpath:database.properties")
public class DataJpaConfig {

    @Value("${spring.data.driver-classname}")
    private String driver;

    @Value("${spring.data.url}")
    private String url;

    @Value("${spring.data.username}")
    private String username;

    @Value("${spring.data.password}")
    private String password;

    @Bean
    public DataSource dataSource() {
        DriverManagerDataSource dataSource = new DriverManagerDataSource();
        dataSource.setDriverClassName(driver);
        dataSource.setUrl(url);
        dataSource.setUsername(username);
        dataSource.setPassword(password);
        return dataSource;
    }

    @Bean
    public SpringLiquibase liquibase() {
        SpringLiquibase liquibase = new SpringLiquibase();
        liquibase.setChangeLog("classpath:liquibase/db.changelog-master.xml");
        liquibase.setDataSource(dataSource());
        return liquibase;
    }

    @Bean
    public EntityManagerFactory entityManagerFactory() {
        HibernateJpaVendorAdapter vendorAdapter = new HibernateJpaVendorAdapter();
        vendorAdapter.setShowSql(false);
        vendorAdapter.setDatabasePlatform("org.hibernate.dialect.MySQL8Dialect");
        LocalContainerEntityManagerFactoryBean factory = new LocalContainerEntityManagerFactoryBean();
        factory.setJpaVendorAdapter(vendorAdapter);
        factory.setPackagesToScan("com.coherentsolutions.nastyabakhshieva");
        factory.setDataSource(dataSource());
        factory.afterPropertiesSet();
        return factory.getObject();
    }


    @Bean
    public JpaTransactionManager transactionManager() {
        JpaTransactionManager txManager = new JpaTransactionManager();
        txManager.setDataSource(dataSource());
        txManager.setEntityManagerFactory(entityManagerFactory());
        return txManager;
    }
}

液基:

在此处输入图像描述

在此处输入图像描述

在此处输入图像描述

我无法想象,从错误来看,它试图转换为字符串的日期 - 我的实体中没有日期。可能是什么问题呢?

同样值得注意的是,当我创建具有多对多关系角色的用户(即需要三个表而不是一个:用户、角色和活页夹)时 - 一切正常,在第一次启动之后,以及随后那些,为用户改变的一切——出现了一个字段role,其余的表已被删除

请告诉我是否有人知道

java
  • 1 个回答
  • 10 Views
Martin Hope
Elizaveta
Asked: 2022-03-16 23:06:59 +0000 UTC

XHR 加载失败:POST jquery

  • 1

您好)我正在尝试以这种方式从表单中注册用户:

const serverAddress = "http://localhost:8080";
        const registerAddress = "/register";

        $("#registration").submit(function () {
            let registerUserDto = {
                "firstName":$("#firstName").val(),
                "lastName":$("#lastName").val(),
                "username":$("#registerUsername").val(),
                "password":$("#registerPassword").val(),
                "repeatPassword":$("#repeatPassword").val()
            };
            $.ajax({
                url: serverAddress + registerAddress,
                method: 'POST',
                data: JSON.stringify(registerUserDto),
                contentType: "application/json; charset=utf-8",
                statusCode: {
                    400: function () {
                        $("#badCredentials").text("Bad credentials");
                    },
                    201: function () {
                        alert("Nice!");
                        window.location = 'login.html';
                    }
                }
            });
        });

当提交注册表单时,会触发一个函数,从字段中拉取值,将它们转换为 json 并发送到服务器。但是当我单击按钮时,会发生以下情况:

在此处输入图像描述

这是什么意思,如何解决?

javascript
  • 1 个回答
  • 10 Views
Martin Hope
Elizaveta
Asked: 2022-03-04 05:01:07 +0000 UTC

mysql触发器如何使其对字段值做出反应

  • 0

这里有张桌子:

Create table some_table(
date_to datetime, 
is_lost boolean default false
)

如何进行这样的触发器,当 date_to 时间到来时,将 is_lost 字段的值更改为 true?这样的后台服务或mysql中的触发器如何只触发事件?

mysql
  • 1 个回答
  • 10 Views
Martin Hope
Elizaveta
Asked: 2022-02-15 23:47:40 +0000 UTC

如何为部署到 Tomcat 服务器的应用程序指定相对路径

  • 0

这是不起作用的: 在此处输入图像描述

如果不指定绝对路径,会抛出 FieNotFoundException

我尝试了以下路径:

../../../resources/connection.properties

src/main/resources/connection.properties

web/src/main/resources/connection.properties

connection.properties

resources/connection.properties

这是他写的:

Caused by: java.io.FileNotFoundException: ***my attempts*** (The system cannot find the path specified)

项目即将开战

如何指定相对路径?

问题来源:

@Service
public class SocketConnectionPropertiesLoader implements ConnectionPropertiesLoader {
    @Override
    public Properties loadProperties(String pathToProperties) {
        File file = new File(pathToProperties);
        Properties properties = new Properties();

        try {
            properties.load(new FileReader(file));
            return properties;

        } catch (IOException e) {
            throw new SocketConnectionException(e);
        }
    }
}

我也试过把资源文件夹转移到WEB-INF,可惜也没成功

java
  • 1 个回答
  • 10 Views
Martin Hope
Elizaveta
Asked: 2022-02-11 16:31:58 +0000 UTC

算法复杂度估计

  • 2

假设我有一棵树。我的挑战是找到最深的叶子,因为它的根。这是伪代码:

heightFunc(elem)
   height = 1;
   for all children c in elem:
     height = max(height, 1 + heightFunc(c));
 return height;

很明显,他先把信息放到栈上,然后再取出来。但是这个算法的复杂度是多少?上)?O(登录)?你如何评价它?

алгоритм
  • 1 个回答
  • 10 Views
Martin Hope
Elizaveta
Asked: 2022-02-08 20:47:30 +0000 UTC

如何创建 MySql 脚本扩展名

  • -1

我想制作一个 mysql 脚本,在启动时为它创建一个数据库和表。我想手动做所有事情,但我不知道我需要在什么扩展名下保存文件?嗯,就是这个文件的内容是create table if not exists....,例如

mysql
  • 1 个回答
  • 10 Views
Martin Hope
Elizaveta
Asked: 2022-02-08 18:08:43 +0000 UTC

@Mock 抛出 NullPointerException

  • 0

我正在尝试编写一个测试方法,但它失败了 - Junit 没有看到@ExtendWith(MockitoExtension.class)它,或者我做错了其他事情:

@ExtendWith(MockitoExtension.class)
class CategoryRepositoryImplTest {

    @Mock
    private static CategoryScanner categoryScanner;

    @InjectMocks
    private CategoryRepository repository;

    @BeforeAll
    static void setMockBehavior() {
         //Валится на след строчке!!
        when(categoryScanner.scanCategories(anyString())).thenReturn(List.of( //<------- На этой
               new ClothesCategory(),
               new ToysCategory(),
               new FoodCategory()
        ));
    }

    @Test
    void findAll() {

        List<Category> expectedCategories = categoryScanner.scanCategories("");
        List<Category> actualCategories = repository.findAll();

        assertEquals(expectedCategories, actualCategories);
    }
}

这是他写的:

Test ignored.

java.lang.NullPointerException
    at coherentsolutions.nastyabakhshieva.repositories.impl.CategoryRepositoryImplTest.setMockBehavior(CategoryRepositoryImplTest.java:34)
    at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.base/java.lang.reflect.Method.invoke(Method.java:564)
    at org.junit.platform.commons.util.ReflectionUtils.invokeMethod(ReflectionUtils.java:688)
    at org.junit.jupiter.engine.execution.MethodInvocation.proceed(MethodInvocation.java:60)
    at org.junit.jupiter.engine.execution.InvocationInterceptorChain$ValidatingInvocation.proceed(InvocationInterceptorChain.java:131)
    at org.junit.jupiter.engine.extension.TimeoutExtension.intercept(TimeoutExtension.java:149)
    at org.junit.jupiter.engine.extension.TimeoutExtension.interceptLifecycleMethod(TimeoutExtension.java:126)
    at org.junit.jupiter.engine.extension.TimeoutExtension.interceptBeforeAllMethod(TimeoutExtension.java:68)
    at org.junit.jupiter.engine.execution.ExecutableInvoker$ReflectiveInterceptorCall.lambda$ofVoidMethod$0(ExecutableInvoker.java:115)
    at org.junit.jupiter.engine.execution.ExecutableInvoker.lambda$invoke$0(ExecutableInvoker.java:105)
    at org.junit.jupiter.engine.execution.InvocationInterceptorChain$InterceptedInvocation.proceed(InvocationInterceptorChain.java:106)
    at org.junit.jupiter.engine.execution.InvocationInterceptorChain.proceed(InvocationInterceptorChain.java:64)
    at org.junit.jupiter.engine.execution.InvocationInterceptorChain.chainAndInvoke(InvocationInterceptorChain.java:45)
    at org.junit.jupiter.engine.execution.InvocationInterceptorChain.invoke(InvocationInterceptorChain.java:37)
    at org.junit.jupiter.engine.execution.ExecutableInvoker.invoke(ExecutableInvoker.java:104)
    at org.junit.jupiter.engine.execution.ExecutableInvoker.invoke(ExecutableInvoker.java:98)
    at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeBeforeAllMethods$9(ClassBasedTestDescriptor.java:384)
    at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73)
    at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.invokeBeforeAllMethods(ClassBasedTestDescriptor.java:382)
    at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.before(ClassBasedTestDescriptor.java:196)
    at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.before(ClassBasedTestDescriptor.java:78)
    at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$5(NodeTestTask.java:136)
    at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73)
    at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$7(NodeTestTask.java:129)
    at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137)
    at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:127)
    at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73)
    at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:126)
    at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:84)
    at java.base/java.util.ArrayList.forEach(ArrayList.java:1380)
    at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:38)
    at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$5(NodeTestTask.java:143)
    at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73)
    at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$7(NodeTestTask.java:129)
    at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137)
    at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:127)
    at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73)
    at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:126)
    at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:84)
    at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:32)
    at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57)
    at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:51)
    at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:108)
    at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:88)
    at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:54)
    at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:67)
    at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:52)
    at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:96)
    at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:75)
    at com.intellij.junit5.JUnit5IdeaTestRunner.startRunnerWithArgs(JUnit5IdeaTestRunner.java:71)
    at com.intellij.rt.junit.IdeaTestRunner$Repeater.startRunnerWithArgs(IdeaTestRunner.java:33)
    at com.intellij.rt.junit.JUnitStarter.prepareStreamsAndStart(JUnitStarter.java:220)
    at com.intellij.rt.junit.JUnitStarter.main(JUnitStarter.java:53)

一定是没有创建模拟对象(但不完全是)。如何纠正?

另一方面,如果这样重写:

@Mock
    private static CategoryScanner categoryScanner;

    @InjectMocks
    private CategoryRepositoryImpl repository;

    @BeforeAll
    static void setMockBehavior() {
        categoryScanner = mock(CategoryScanner.class);

        when(categoryScanner.scanCategories(anyString())).thenReturn(List.of(
               new ClothesCategory(),
               new ToysCategory(),
               new FoodCategory()
        ));
    }

这不会破坏任何东西,但是注释不应该@ExtendWith(MockitoExtension.class)为我创建模拟对象的实例吗?

java
  • 1 个回答
  • 10 Views
Martin Hope
Elizaveta
Asked: 2022-02-05 00:03:30 +0000 UTC

从 $.getJson 输出到页面

  • 0

我搞砸了 - 我想这样做:

在此处输入图像描述

结果是这样的:

在此处输入图像描述

我从服务器获取 JSON:

在此处输入图像描述

我正在尝试将其添加到页面中,如下所示:

function loadCatalog(){
        $.getJSON("/update", function (data) {
            console.log(data);

            for (let i = 0; i < data.categories.length; i++) {
                let div = $("<div></div>").addClass("alert alert-info text-center");
                div.append($("<h3></h3>").text(data.categories[i].title));

                div.append('<table class="table"><thead><tr>');
                div.append('<th scope="col">Id</th>');
                div.append('<th scope="col">Name</th>');
                div.append('<th scope="col">Price (in cents)</th>');
                div.append('<th scope="col">Rate</th>');
                div.append('</tr></thead><tbody>');

                for (let j = 0; j < data.categories[i].products.length; j++) {
                    div.append('<tr><th scope="row">' + data.categories[i].products[j].id + '</th>');
                    div.append('<td>' + data.categories[i].products[j].name + '</td>');
                    div.append('<td>' + data.categories[i].products[j].priceInCents + '</td>');
                    div.append('<td>' + data.categories[i].products[j].rate + '</td></tr>');
                }

                div.append('</tbody></table>');

                $("#catalog").append(div).append('<br>');
            }
        });
    }

我在做什么错?(我在这件事上完全是绿色的

JSON:

{
  "categories": [
    {
      "id": 1,
      "title": "Clothes category",
      "products": [
        {
          "id": 1,
          "name": "Sweater",
          "priceInCents": 65458,
          "rate": 45
        },
        {
          "id": 2,
          "name": "Jacket",
          "priceInCents": 11111,
          "rate": 89
        },
        {
          "id": 3,
          "name": "Coat",
          "priceInCents": 9999,
          "rate": 36
        },
        {
          "id": 4,
          "name": "Vest",
          "priceInCents": 1200,
          "rate": 68
        },
        {
          "id": 5,
          "name": "Shorts",
          "priceInCents": 45000,
          "rate": 90
        },
        {
          "id": 6,
          "name": "Casual dress",
          "priceInCents": 36500,
          "rate": 79
        }
      ]
    },
    {
      "id": 2,
      "title": "Food category",
      "products": [
        {
          "id": 7,
          "name": "Meet",
          "priceInCents": 2132,
          "rate": 100
        },
        {
          "id": 8,
          "name": "Cookies",
          "priceInCents": 1111,
          "rate": 90
        },
        {
          "id": 9,
          "name": "Bread",
          "priceInCents": 777,
          "rate": 85
        },
        {
          "id": 10,
          "name": "Apples",
          "priceInCents": 454,
          "rate": 32
        },
        {
          "id": 11,
          "name": "Ice cream",
          "priceInCents": 873,
          "rate": 79
        }
      ]
    },
    {
      "id": 3,
      "title": "Toys category",
      "products": [
        {
          "id": 13,
          "name": "Barbie",
          "priceInCents": 12345,
          "rate": 80
        },
        {
          "id": 14,
          "name": "Cycle",
          "priceInCents": 65432,
          "rate": 90
        },
        {
          "id": 15,
          "name": "Lorry",
          "priceInCents": 10000,
          "rate": 55
        },
        {
          "id": 16,
          "name": "Little hare",
          "priceInCents": 6400,
          "rate": 97
        },
        {
          "id": 17,
          "name": "Bricks",
          "priceInCents": 1500,
          "rate": 100
        },
        {
          "id": 18,
          "name": "Rocking horse",
          "priceInCents": 10999,
          "rate": 10
        }
      ]
    }
  ]
}
javascript
  • 2 个回答
  • 10 Views
Martin Hope
Elizaveta
Asked: 2022-02-04 22:19:19 +0000 UTC

Gson + List<> 如何序列化层次结构

  • 0

我有以下层次结构:

产品:

import com.google.gson.annotations.Expose;
import lombok.Data;
import lombok.NoArgsConstructor;

import java.io.Serializable;
import java.util.Objects;
import java.util.concurrent.atomic.AtomicLong;

@Data
@NoArgsConstructor
public class Product implements Serializable {

    private static final AtomicLong counter = new AtomicLong(1L);

    @Expose
    private long id;

    @Expose
    private String name;

    @Expose
    private long priceInCents;

    @Expose
    private int rate;

    public Product(String name, long priceInCents, int rate) {

        this.id = counter.getAndIncrement();

        this.name = name;
        this.priceInCents = priceInCents;
        this.rate = rate;
    }

    public Product(long id, String name, long priceInCents, int rate) {
        this.id = id;
        this.name = name;
        this.priceInCents = priceInCents;
        this.rate = rate;
    }

    public Product(long id) {
        this.id = id;
    }

    @Override
    public boolean equals(Object o) {
        if (this == o) return true;
        if (o == null || getClass() != o.getClass()) return false;
        Product product = (Product) o;
        return id == product.id;
    }

    @Override
    public int hashCode() {
        return Objects.hash(id);
    }
}

产品类别:

import coherentsolutions.nastyabakhshieva.model.products.Product;
import com.google.gson.annotations.Expose;
import lombok.Data;

import java.io.Serializable;
import java.util.List;
import java.util.Objects;
import java.util.concurrent.atomic.AtomicLong;

@Data
public abstract class Category implements Serializable {

    private static final AtomicLong counter = new AtomicLong(1L);

    @Expose
    protected long id;

    @Expose
    protected String title;

    @Expose
    protected List<Product> products;

    public Category(long id) {
        this.id = id;
    }

    public Category() {
        this.id = counter.getAndIncrement();
    }

    @Override
    public String toString() {
        return "Category{" +
                "title='" + title + '\'' +
                ", products=" + products +
                '}';
    }

    @Override
    public boolean equals(Object o) {
        if (this == o) return true;
        if (o == null || getClass() != o.getClass()) return false;
        Category category = (Category) o;
        return id == category.id;
    }

    @Override
    public int hashCode() {
        return Objects.hash(id);
    }
}

还有一个包含所有类别的目录:

@Data
@AllArgsConstructor
@NoArgsConstructor
public class Catalog implements Serializable {

    private List<Category> categories;

}

我知道可以为列表获取适配器 ---> Type itemsListType = new TypeToken<List<GoodsItem>>() {}.getType();,但我的情况并不完全相同(请帮助,我该如何发送?

我也尝试通过方法简单地序列化,gson.toJson(catalog)但这来到了前面{}

java
  • 2 个回答
  • 10 Views

Sidebar

Stats

  • 问题 10021
  • Answers 30001
  • 最佳答案 8000
  • 用户 6900
  • 常问
  • 回答
  • Marko Smith

    我看不懂措辞

    • 1 个回答
  • Marko Smith

    请求的模块“del”不提供名为“default”的导出

    • 3 个回答
  • Marko Smith

    "!+tab" 在 HTML 的 vs 代码中不起作用

    • 5 个回答
  • Marko Smith

    我正在尝试解决“猜词”的问题。Python

    • 2 个回答
  • Marko Smith

    可以使用哪些命令将当前指针移动到指定的提交而不更改工作目录中的文件?

    • 1 个回答
  • Marko Smith

    Python解析野莓

    • 1 个回答
  • Marko Smith

    问题:“警告:检查最新版本的 pip 时出错。”

    • 2 个回答
  • Marko Smith

    帮助编写一个用值填充变量的循环。解决这个问题

    • 2 个回答
  • Marko Smith

    尽管依赖数组为空,但在渲染上调用了 2 次 useEffect

    • 2 个回答
  • Marko Smith

    数据不通过 Telegram.WebApp.sendData 发送

    • 1 个回答
  • Martin Hope
    Alexandr_TT 2020年新年大赛! 2020-12-20 18:20:21 +0000 UTC
  • Martin Hope
    Alexandr_TT 圣诞树动画 2020-12-23 00:38:08 +0000 UTC
  • Martin Hope
    Air 究竟是什么标识了网站访问者? 2020-11-03 15:49:20 +0000 UTC
  • Martin Hope
    Qwertiy 号码显示 9223372036854775807 2020-07-11 18:16:49 +0000 UTC
  • Martin Hope
    user216109 如何为黑客设下陷阱,或充分击退攻击? 2020-05-10 02:22:52 +0000 UTC
  • Martin Hope
    Qwertiy 并变成3个无穷大 2020-11-06 07:15:57 +0000 UTC
  • Martin Hope
    koks_rs 什么是样板代码? 2020-10-27 15:43:19 +0000 UTC
  • Martin Hope
    Sirop4ik 向 git 提交发布的正确方法是什么? 2020-10-05 00:02:00 +0000 UTC
  • Martin Hope
    faoxis 为什么在这么多示例中函数都称为 foo? 2020-08-15 04:42:49 +0000 UTC
  • Martin Hope
    Pavel Mayorov 如何从事件或回调函数中返回值?或者至少等他们完成。 2020-08-11 16:49:28 +0000 UTC

热门标签

javascript python java php c# c++ html android jquery mysql

Explore

  • 主页
  • 问题
    • 热门问题
    • 最新问题
  • 标签
  • 帮助

Footer

RError.com

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

帮助

© 2023 RError.com All Rights Reserve   沪ICP备12040472号-5