小编ale*_*oid的帖子

Spring Data JPA将本机查询结果映射到非实体POJO

我有一个带有本机查询的Spring Data存储库方法

@Query(value = "SELECT g.*, gm.* FROM group g LEFT JOIN group_members gm ON g.group_id = gm.group_id and gm.user_id = :userId WHERE g.group_id = :groupId", nativeQuery = true)
    GroupDetails getGroupDetails(@Param("userId") Integer userId, @Param("groupId") Integer groupId);
Run Code Online (Sandbox Code Playgroud)

我想将结果映射到非实体POJO GroupDetails.

是否有可能,如果可以的话,请你提供一个例子吗?

spring hibernate jpa pojo spring-data

69
推荐指数
4
解决办法
9万
查看次数

Spring MVC @RestController和redirect

我有一个用Spring MVC @RestController实现的REST端点.有时,取决于我的控制器中的输入参数我需要在客户端上发送http重定向.

有没有可能使用Spring MVC @RestController,如果可以的话,请你举个例子吗?

rest redirect spring spring-mvc http-redirect

58
推荐指数
4
解决办法
6万
查看次数

Spring Boot CORS过滤器 - CORS预检频道没有成功

我需要在我的Spring Boot Web应用程序中添加CORS过滤器.

我已经添加了CORS映射,如以下文档中所述http://docs.spring.io/spring/docs/current/spring-framework-reference/html/cors.html

这是我的配置:

@Configuration
@EnableWebMvc
public class WebMvcConfig extends WebMvcConfigurerAdapter {

    @Override
    public void addCorsMappings(CorsRegistry registry) {
        // @formatter:off   
        registry
            .addMapping("/**")
            .allowedOrigins(CrossOrigin.DEFAULT_ORIGINS)
            .allowedHeaders(CrossOrigin.DEFAULT_ALLOWED_HEADERS)
            .allowedMethods("GET", "POST", "PUT", "DELETE", "OPTIONS")
            .maxAge(3600L);
        // @formatter:on
    }

...

}
Run Code Online (Sandbox Code Playgroud)

现在,当我尝试访问我的API时,我收到以下错误:

Cross-Origin Request Blocked: The Same Origin Policy disallows reading the remote resource at https://example.com/api/v1.0/user. (Reason: CORS preflight channel did not succeed).
Run Code Online (Sandbox Code Playgroud)

这是来自FF控制台的屏幕截图:

在此输入图像描述

我做错了什么以及如何正确配置CORS标头以避免此问题?

spring spring-mvc spring-security cors spring-boot

25
推荐指数
4
解决办法
4万
查看次数

Spring嵌套事务

在我的Spring Boot项目中,我实现了以下服务方法:

@Transactional
public boolean validateBoard(Board board) {
    boolean result = false;
    if (inProgress(board)) {
        if (!canPlayWithCurrentBoard(board)) {
            update(board, new Date(), Board.AFK);
            throw new InvalidStateException(ErrorMessage.BOARD_TIMEOUT_REACHED);
        }
        if (!canSelectCards(board)) {
            update(board, new Date(), Board.COMPLETED);
            throw new InvalidStateException(ErrorMessage.ALL_BOARD_CARDS_ALREADY_SELECTED);
        }
        result = true;
    }
    return result;
}
Run Code Online (Sandbox Code Playgroud)

在这个方法里面,我使用另一种叫做的服务方法update:

@Transactional(propagation = Propagation.REQUIRES_NEW)
public Board update(Board board, Date finishedDate, Integer status) {
    board.setStatus(status);
    board.setFinishedDate(finishedDate);

    return boardRepository.save(board);
}
Run Code Online (Sandbox Code Playgroud)

我需要update独立于validateBoard方法中启动的所有者事务,在方法中提交对数据库的更改.现在任何变化都会在任何异常的情况下回滚.

即使@Transactional(propagation = Propagation.REQUIRES_NEW)它不起作用.

如何使用Spring正确执行此操作并允许嵌套事务?

spring spring-transactions spring-data spring-data-jpa spring-boot

24
推荐指数
4
解决办法
2万
查看次数

Swagger TypeError:无法在'Window'上执行'fetch':使用GET/HEAD方法的请求不能有正文

我已将Swagger添加到Spring Boot 2应用程序中:

这是我的Swagger配置:

@Configuration
@EnableSwagger2
public class SwaggerConfig {

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

}
Run Code Online (Sandbox Code Playgroud)

这是Maven依赖:

    <!-- Swagger2 -->
    <dependency>
        <groupId>io.springfox</groupId>
        <artifactId>springfox-swagger2</artifactId>
        <version>2.8.0</version>
    </dependency>
    <dependency>
        <groupId>io.springfox</groupId>
        <artifactId>springfox-swagger-ui</artifactId>
        <version>2.8.0</version>
    </dependency>
Run Code Online (Sandbox Code Playgroud)

当我尝试调用例如http:// localhost:8080/api/actuator/auditevents时, 它失败并出现以下错误:

TypeError: Failed to execute 'fetch' on 'Window': Request with GET/HEAD method cannot have body.
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

我做错了什么以及如何解决?

swagger swagger-ui spring-boot swagger-2.0

23
推荐指数
5
解决办法
3万
查看次数

自己的Spring OAuth2服务器以及第三方OAuth提供商

在Spring Boot应用程序中,我有一个OAuth2授权/资源服务器.基于此和Spring Security,我已经获得了我的Spring MVC REST API端点.

除此之外,我还想基于第三方OAuth提供商(如Twitter,Facebook,Google)为我的REST端点添加身份验证.

在我的应用程序中,我有两个实体 - UserSocialUser.SocialUser代表社交网络中的用户个人资料 User可以有0-*关联SocialUsers.现在我可以在Twitter上验证用户,之后我在我的数据库中创建两条记录 - User和SocialUser.SocialUser包含Twitter发布的访问/刷新令牌以及来自此社交网络的一些其他配置文件信息.

现在我不知道如何将从社交网络创建的用户与我现有的身份验证\授权流程相关联.对于这个用户,我想创建自己的(由我自己的OAuth2授权服务器)accessToken并将其提供给客户端.

此外,该用户在其实体中没有用户名,密码和电子邮件User.而且我也不知道如何手动创建自己的访问令牌并将其发送到客户端以供将来的API调用.

我找到了一些例子:

@Inject
private TokenEndpoint tokenEndpoint;

public String createAccessToken(User user) {
    HashMap<String, String> parameters = new HashMap<String, String>();
    parameters.put("client_id", "appid");
    parameters.put("client_secret", "myOAuthSecret");
    parameters.put("grant_type", "password");
    parameters.put("password", user.getPassword());
    parameters.put("scope", "read write");
    parameters.put("username", user.getUsername());

    // principal ??
    return tokenEndpoint.getAccessToken(principal, parameters);
}
Run Code Online (Sandbox Code Playgroud)

但我不知道如何Principal基于我的User实体创建,我也不确定这是一个正确的方法.

那么,主要的问题是 - 如何通过我自己的OAuth服务器为这个新用户手动生成这个新令牌?

请告诉我如何才能正确实施.谢谢.

更新:

我已添加ProviderSignInController到我的应用程序中,现在能够通过Twitter执行完整的OAuth舞蹈.此外,我已经实现了自己的Neo4jConnectionRepository,Neo4jUsersConnectionRepository因为我使用Neo4j作为主数据库. …

spring-mvc spring-security oauth-2.0 spring-social spring-security-oauth2

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

WebDriver从页面中删除元素

我正在使用Selenium WebDriver(ChromeDriver).我需要在处理后从DOM中删除一些元素(来自DOM模型).

例如,我有以下元素:

WebElement starRatingElement = reviewElement.findElement(By.className("review-info-star"));
Run Code Online (Sandbox Code Playgroud)

如何starRatingElement从浏览器DOM模型中删除?

如何使用Selenium WebDriver在Java中实现它?请举例说明.

java selenium-chromedriver selenium-webdriver

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

Spring Data - 存储库方法名称中的OR条件

在我的Spring Data项目中,我有一个以下实体:

@Entity
@NamedEntityGraph(name = "graph.CardPair", attributeNodes = {})
@Table(name = "card_pairs")
public class CardPair extends BaseEntity implements Serializable {

    private static final long serialVersionUID = 7571004010972840728L;

    @Id
    @SequenceGenerator(name = "card_pairs_id_seq", sequenceName = "card_pairs_id_seq", allocationSize = 1)
    @GeneratedValue(strategy = GenerationType.AUTO, generator = "card_pairs_id_seq")
    private Long id;

    @ManyToOne(fetch = FetchType.LAZY)
    @JoinColumn(name = "card1_id")
    private Card card1;

    @ManyToOne(fetch = FetchType.LAZY)
    @JoinColumn(name = "card2_id")
    private Card card2;

    @ManyToOne(fetch = FetchType.LAZY)
    @JoinColumn(name = "selected_card_id")
    private Card selectedCard;

    @ManyToOne(fetch = FetchType.LAZY)
    @JoinColumn(name = "board_id")
    private …
Run Code Online (Sandbox Code Playgroud)

java spring jpa spring-data spring-data-jpa

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

Spring Boot 2.5.0 和 InvalidDefinitionException:默认情况下不支持 Java 8 日期/时间类型 `java.time.Instant`

从 Spring Boot 2.4.5 更新到 Spring 2.5.0 后,我注意到应用程序日志中存在以下异常:

Caused by: com.fasterxml.jackson.databind.exc.InvalidDefinitionException: Java 8 date/time type `java.time.Instant` not supported by default: add Module "com.fasterxml.jackson.datatype:jackson-datatype-jsr310" to enable handling (through reference chain: org.telegram.telegrambots.meta.api.objects.Update["my_chat_member"]->org.telegram.telegrambots.meta.api.objects.ChatMemberUpdated["new_chat_member"]->org.telegram.telegrambots.meta.api.objects.ChatMember["untilDateAsInstant"])
    at com.fasterxml.jackson.databind.exc.InvalidDefinitionException.from(InvalidDefinitionException.java:77) ~[jackson-databind-2.12.3.jar!/:2.12.3]
    at com.fasterxml.jackson.databind.SerializerProvider.reportBadDefinition(SerializerProvider.java:1276) ~[jackson-databind-2.12.3.jar!/:2.12.3]
    at com.fasterxml.jackson.databind.ser.impl.UnsupportedTypeSerializer.serialize(UnsupportedTypeSerializer.java:35) ~[jackson-databind-2.12.3.jar!/:2.12.3]
    at com.fasterxml.jackson.databind.ser.BeanPropertyWriter.serializeAsField(BeanPropertyWriter.java:728) ~[jackson-databind-2.12.3.jar!/:2.12.3]
    at com.fasterxml.jackson.databind.ser.std.BeanSerializerBase.serializeFields(BeanSerializerBase.java:770) ~[jackson-databind-2.12.3.jar!/:2.12.3]
    at com.fasterxml.jackson.databind.ser.BeanSerializer.serialize(BeanSerializer.java:178) ~[jackson-databind-2.12.3.jar!/:2.12.3]
    at com.fasterxml.jackson.databind.ser.BeanPropertyWriter.serializeAsField(BeanPropertyWriter.java:728) ~[jackson-databind-2.12.3.jar!/:2.12.3]
    at com.fasterxml.jackson.databind.ser.std.BeanSerializerBase.serializeFields(BeanSerializerBase.java:770) ~[jackson-databind-2.12.3.jar!/:2.12.3]
    at com.fasterxml.jackson.databind.ser.BeanSerializer.serialize(BeanSerializer.java:178) ~[jackson-databind-2.12.3.jar!/:2.12.3]
    at com.fasterxml.jackson.databind.ser.BeanPropertyWriter.serializeAsField(BeanPropertyWriter.java:728) ~[jackson-databind-2.12.3.jar!/:2.12.3]
    at com.fasterxml.jackson.databind.ser.std.BeanSerializerBase.serializeFields(BeanSerializerBase.java:770) ~[jackson-databind-2.12.3.jar!/:2.12.3]
    at com.fasterxml.jackson.databind.ser.BeanSerializer.serialize(BeanSerializer.java:178) ~[jackson-databind-2.12.3.jar!/:2.12.3]
    at com.fasterxml.jackson.databind.ser.DefaultSerializerProvider._serialize(DefaultSerializerProvider.java:480) ~[jackson-databind-2.12.3.jar!/:2.12.3]
    at com.fasterxml.jackson.databind.ser.DefaultSerializerProvider.serializeValue(DefaultSerializerProvider.java:319) ~[jackson-databind-2.12.3.jar!/:2.12.3]
    at com.fasterxml.jackson.databind.ObjectWriter$Prefetch.serialize(ObjectWriter.java:1514) ~[jackson-databind-2.12.3.jar!/:2.12.3]
    at com.fasterxml.jackson.databind.ObjectWriter._writeValueAndClose(ObjectWriter.java:1215) ~[jackson-databind-2.12.3.jar!/:2.12.3]
    at com.fasterxml.jackson.databind.ObjectWriter.writeValue(ObjectWriter.java:1059) …
Run Code Online (Sandbox Code Playgroud)

java spring jackson spring-boot

17
推荐指数
2
解决办法
3万
查看次数

浮动的Java 8流平均值

我有以下型号:

public class WeightChange {

    private float value;

    public float getValue() {
        return value;
    }

    public void setValue(float value) {
        this.value = value;
    }

}
Run Code Online (Sandbox Code Playgroud)

和收藏:

private List<WeightChange> weightChanges;
Run Code Online (Sandbox Code Playgroud)

我已经实现了使用Java 8功能获得平均权重值的函数:

public float getAvgChangedWeight() {
    return (float) weightChanges.stream().mapToDouble(WeightChange::getValue).average().getAsDouble();      
}
Run Code Online (Sandbox Code Playgroud)

你能不能帮助改进它,因为我不认为铸造加倍是一个好主意.

weightChanges集合为空时,它也会抛出异常.在这种情况下如何改进它?

java java-8 java-stream

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