我使用 SpringBoot 进行 REST Web 服务开发,使用 SonarQube 进行静态分析。
我的应用程序中有一些端点,如下所示:
@PostMapping
ResponseEntity<?> addSomething(@RequestBody Some object) {
// some code there
return new ResponseEntity<>(HttpStatus.NO_CONTENT);
}
Run Code Online (Sandbox Code Playgroud)
SonarQube 抱怨使用带有通配符的 ResponseEntity,向我报告了一个严重问题“通用通配符类型不应在返回参数中使用”。
我想知道是否应该在 SonarQube 中禁用此验证,或者为这些情况提供不同的返回类型。
你怎么看待这件事?
我在pom.xml中为maven-compiler-plugin配置了以下配置.
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>2.3.2</version>
<configuration>
<source>1.8</source>
<target>1.8</target>
</configuration>
</plugin>
Run Code Online (Sandbox Code Playgroud)
什么应该是jdk的源和目标版本?它取决于我的电脑上安装的jdk的版本?愿他们与众不同吗?例如,安装的jdk为1.8,源参数为1.6,目标为1.7.
我有以下index.jsp:
<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<fmt:setLocale value="ru_RU"/>
<fmt:setBundle basename="messages"/>
<html>
<head>
<title></title>
</head>
<body>
<h1><fmt:message key="login"/></h1>
</body>
</html>
Run Code Online (Sandbox Code Playgroud)
和属性文件messages_ru_RU.properties:
login = ?????
Run Code Online (Sandbox Code Playgroud)
问题是我在输出中得到了垃圾unicode字符:
Ëîãèí
Run Code Online (Sandbox Code Playgroud)
更新
将.properies文件编码更改为UTF-8.最新产品:Ðогин
请帮助我,将其更改为正常的西里尔字母.
我有一个JPQL查询,它从数据库中检索实体的排序列表.我有其中一个实体的id.如何在我的选择中使用已知ID获取记录的上一条和下一条记录?
select distinct n from News n
inner join n.author a
inner join n.tags t
where a.id = :authorId and t.id in :tagsId
order by size(n.comments) desc
Run Code Online (Sandbox Code Playgroud)
新闻有一位作者,许多标签和评论.我用给定的作者和标签选择新闻,并根据评论的次数对它们进行排序.
使用JDBC时,我已经解决了这些问题rownum.
我可以使用JPA获得结果中记录的位置(rownum)吗?如果我知道记录的位置,我可以将第一个结果定义到该位置 - 1,并且对于给定查询,最大结果为3.这就是我如何得到以前,当前和下一个新闻.
除了遍历新闻列表之外,还有其他解决方案吗?
我使用的是Slick 3.1.0,需要保留java.time.LocalDate类型的字段.
我有模特课:
case class Position(companyName: String, title: String, startDate: Option[LocalDate], endDate: Option[LocalDate], positionId: Option[Int] = None)
Run Code Online (Sandbox Code Playgroud)
以下映射:
private[PositionTable] class PositionTable(tag: Tag) extends Table[Position](tag, "POSITIONS") {
val positionId = column[Int]("POSITION_ID", O.PrimaryKey, O.AutoInc)
val companyName = column[String]("COMPANY_NAME")
val title = column[String]("TITLE")
val startDate = column[Date]("START_DATE")
val endDate = column[Date]("END_DATE")
def * = (companyName, title, startDate, endDate, positionId.?) <>(Position.tupled, Position.unapply)
}
Run Code Online (Sandbox Code Playgroud)
如何将startDate和endDate字段映射到数据库中以DATE类型表示?
列映射器中的NullPointerException的Stacktrace:
java.lang.NullPointerException
at com.tiedin.repo.PositionTable$class.$init$(PositionRepository.scala:54)
at repo.PositionRepositoryTest.<init>(PositionRepositoryTest.scala:13)
at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)
at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
at java.lang.reflect.Constructor.newInstance(Constructor.java:422)
at java.lang.Class.newInstance(Class.java:442)
at org.scalatest.tools.Runner$.genSuiteConfig(Runner.scala:1422)
at …Run Code Online (Sandbox Code Playgroud) 我已经看到很多 Spring Controllers 实现的例子,它们用于ResponseEntity<?>返回具有特定状态代码和可选主体的 HTTP 响应。
ResponseEntity<?>即使在像下面这样的官方 Spring 教程中也存在表示法:Building REST services with Spring
使用ResponseEntity<?>而不是 simple的原因是什么ResponseEntity?
这与我之前的问题有点相关:SonarQube 抱怨使用带有通配符的 ResponseEntity
在什么是原始类型中有一些解释,为什么我们不应该使用它?线程,但我想更多地关注 ResponseEntity 类,它在 Spring 控制器中的使用。
考虑下面的代码片段,其中somethingService返回Optional的Something类:
@GetMapping
ResponseEntity<?> getSomething() {
return somethingService.getSomething()
.map(smth -> new ResponseEntity<>(smth, HttpStatus.OK))
.orElse(new ResponseEntity<>(HttpStatus.NOT_FOUND));
}
Run Code Online (Sandbox Code Playgroud)
是否有任何理由要离开一个通配符,即使我没有因为得到编译器检查任何利润ResponseEntity(HttpStatus status)parametrisesResponseEntity有Object课吗?
我有一个返回的方法Mono<Output>:
interface Processor {
Mono<Output> process(Input input);
}
Run Code Online (Sandbox Code Playgroud)
我想对processor集合执行此方法:
List<Input> inputs = // get inputs
Processor processor = // get processor
List<Mono<Output>> outputs = inputs.stream().map(supplier::supply).collect(toList());
Run Code Online (Sandbox Code Playgroud)
但是List<Mono<Output>>我想得到的不是Mono<List<Output>>汇总,而是包含汇总的结果。
我尝试过reduce,但最终结果看起来很笨拙:
Mono<List<Output>> result = inputs.stream().map(processor::process)
.reduce(Mono.just(new ArrayList<>()),
(monoListOfOutput, monoOfOutput) ->
monoListOfOutput.flatMap(list -> monoOfOutput.map(output -> {
list.add(output);
return list;
})),
(left, right) ->
left.flatMap(leftList -> right.map(rightList -> {
leftList.addAll(rightList);
return leftList;
})));
Run Code Online (Sandbox Code Playgroud)
我可以用更少的代码来实现吗?