我有一个带有本机查询的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 MVC @RestController实现的REST端点.有时,取决于我的控制器中的输入参数我需要在客户端上发送http重定向.
有没有可能使用Spring MVC @RestController,如果可以的话,请你举个例子吗?
我需要在我的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 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
我已将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)
我做错了什么以及如何解决?
在Spring Boot应用程序中,我有一个OAuth2授权/资源服务器.基于此和Spring Security,我已经获得了我的Spring MVC REST API端点.
除此之外,我还想基于第三方OAuth提供商(如Twitter,Facebook,Google)为我的REST端点添加身份验证.
在我的应用程序中,我有两个实体 - User
和SocialUser
.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
我正在使用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中实现它?请举例说明.
在我的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) 从 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) 我有以下型号:
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
集合为空时,它也会抛出异常.在这种情况下如何改进它?
spring ×6
java ×4
spring-boot ×4
spring-data ×3
spring-mvc ×3
jpa ×2
cors ×1
hibernate ×1
jackson ×1
java-8 ×1
java-stream ×1
oauth-2.0 ×1
pojo ×1
redirect ×1
rest ×1
swagger ×1
swagger-2.0 ×1
swagger-ui ×1