我有一个包含集合作为属性的实体:
public class Entity {
@JsonProperty(value="homes")
@JsonDeserialize(as=HashSet.class, contentAs=HomeImpl.class)
private Collection<Home> homes = new ArrayList<Home>();
}
Run Code Online (Sandbox Code Playgroud)
如果request包含null作为请求属性:
{
"homes": null
}
Run Code Online (Sandbox Code Playgroud)
那么homes被设置为null.我想要做的是将房屋设置为空列表.我需要为此编写特殊的反序列化器吗?还是有一个用于集合?我尝试的是这个反序列化器,但它看起来很丑陋(它不是通用的,而是使用实现而不是接口).
public class NotNullCollectionDeserializer extends JsonDeserializer<Collection<HomeImpl>> {
@Override
public Collection<HomeImpl> deserialize(final JsonParser jsonParser, final DeserializationContext deserializationContext) throws IOException, JsonProcessingException {
return jsonParser.readValueAs(new TypeReference<Collection<HomeImpl>>(){});
}
@Override
public Collection<HomeImpl> getNullValue() {
return Collections.emptyList();
}
}
Run Code Online (Sandbox Code Playgroud)
这么几个问题:
我想知道为什么这个查询的成本
select * from address a
left join name n on n.adress_id=a.id
where a.street='01';
Run Code Online (Sandbox Code Playgroud)
高于
select * from address a
left join name n on n.adress_id=a.id
where a.street=N'01';
Run Code Online (Sandbox Code Playgroud)
地址表看起来像这样
ID NUMBER
STREET VARCHAR2(255 CHAR)
POSTAL_CODE VARCHAR2(255 CHAR)
Run Code Online (Sandbox Code Playgroud)
和名称表看起来像这样
ID NUMBER
ADDRESS_ID NUMBER
NAME VARCHAR2(255 CHAR)
SURNAME VARCHAR2(255 CHAR)
Run Code Online (Sandbox Code Playgroud)
这些是解释计划返回的成本
解释'01'的计划
-----------------------------------------------------------------------------------------------------
| Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time |
-----------------------------------------------------------------------------------------------------
| 0 | SELECT STATEMENT | | 3591 | 1595K| 87 (0)| 00:00:02 …Run Code Online (Sandbox Code Playgroud) 我是Java EE/JSF的新手,现在阅读有关CDI限定符的内容 - 更改类实现的可能性.这很棒,但我有一个问题.据我所知,我可以使用限定符更改类实现,但我需要在使用此实现的任何地方更改它.在一个地方做这件事的最佳解决方案是什么?凭借我对Java EE的小知识,我发现了这一点.
让我们假设我们正在创建简单的Calculator应用程序.我们需要创建几个类:
Calculator (计算器的基本实现)ScientificCalculator (科学实施计算器)MiniCalculator (潜力最小)MockCalculator (用于单元测试)@Calculator(将指示计算器的实际实现;我应该为每个实现创建限定符吗?)这是个问题.我有四个计算器的实现,我想在少数地方使用其中一个,但只有一个在时间(在我将使用的初始项目阶段MiniCalculator,然后Calculator等等).如何在没有更改代码的情况下在注入对象的每个位置更改实现?我应该创建负责注射的工厂method injector吗?我的解决方案是正确有意义的吗
厂
@ApplicationScoped
public class CalculatorFctory implements Serializable {
private Calculator calc;
@Produces @Calculator Calculator getCalculator() {
return new Calculator();
}
}
Run Code Online (Sandbox Code Playgroud)
使用计算器的类
public class CalculateUserAge {
@Calculator
@Inject
private Calculator calc;
}
Run Code Online (Sandbox Code Playgroud)
这是正确的解决方案吗?如果我错了或者有更好的解决方案,请纠正我.谢谢!.
我已经创建了REST服务,ExceptionEntity如果出现问题,它会返回序列化的类.
如果应该反序列化的json Gson.fromJson()是不同的类型,我想抛出一些异常.例如,我有这个字符串应该反序列化(my.ExceptionEntity.class):
{"exceptionId":2,"message":"Room aaaa already exists."}
Run Code Online (Sandbox Code Playgroud)
但我使用Roomclass作为此序列化字符串的类型:
String json = "{\"exceptionId\":2,\"message\":\"Room aaaa already exists.\"}";
Room r = gson.fromJson(json, Room.class);
// as a result r==null but I want to throw Exception; how?
Run Code Online (Sandbox Code Playgroud)
[编辑] 我测试了这个,它不起作用:
try {
return g.fromJson(roomJson, new TypeToken<Room>(){}.getType());
// this also doesn't work
// return g.fromJson(roomJson, Room.class);
} catch (JsonSyntaxException e) {
pepuch.multiplayergame.entity.Exception ex = g.fromJson(roomJson, pepuch.multiplayergame.entity.Exception.class);
throw ExceptionController.toGameServerException(ex);
} catch (JsonParseException e) {
pepuch.multiplayergame.entity.Exception ex = g.fromJson(roomJson, pepuch.multiplayergame.entity.Exception.class);
throw ExceptionController.toGameServerException(ex);
}
Run Code Online (Sandbox Code Playgroud) 如何将属性传递给gradle自定义任务?在蚂蚁它看起来像这样:
public class MyCustomTask extends Task {
private String name;
private String version;
@Override
public void execute() throws BuildException {
// do the job
}
public void setName(String name) {
this.name = name;
}
public void setVersion(String version) {
this.version = version;
}
}
Run Code Online (Sandbox Code Playgroud)
如何在gradle中完成?
class MyCustomTask extends DefaultTask {
private String name
private String version
@TaskAction
def build() {
// do the job
}
}
Run Code Online (Sandbox Code Playgroud)
属性名称和版本是必需的,用户需要将它们传递给任务.
我在openshift上创建了Tomcat7应用程序,但现在我想将其更改为JBoss Application Server 7.是否可以在不重新创建应用程序的情况下删除(删除T7然后创建JB AS 7)?
我想在黄瓜中创建自定义数据表变换器.这是我的功能的样子:
Given board
| o | _ | _ |
| o | _ | _ |
| o | _ | _ |
Run Code Online (Sandbox Code Playgroud)
我想把它放到自定义对象中.让我们说它看起来像这样:
class Board {
private List<List<String>> board;
public Board(List<List<String>> board) {
this.board = board;
}
}
Run Code Online (Sandbox Code Playgroud)
我的步骤定义应如下所示:
@Given("^board$")
public void board(Board board) throws Throwable {
// todo
}
Run Code Online (Sandbox Code Playgroud)
步骤定义适用于DataTable类和List<List<String>>
@Given("^board$")
public void board(DataTable board) throws Throwable {
// this works fine
}
Run Code Online (Sandbox Code Playgroud)
这也很好
@Given("^board$")
public void board(List<List<String>> board) throws Throwable {
// this …Run Code Online (Sandbox Code Playgroud) 例如,在代码中,我们有很多链式方法obj.getA().getB().getC().getD().我想创建一个帮助类,它将检查方法getD()是否为null,但在此之前我需要检查所有以前的getter.我可以这样做:
try {
obj.getA().getB().getC().getD();
}
catch (NullPointerException e) {
// some getter is null
}
Run Code Online (Sandbox Code Playgroud)
或者(这是"愚蠢的")
if (obj!null && obj.getA()!=null && obj.getA().getB()!=null && ...) {
obj.getA().getB().getC().getD();
}
else {
// some getter is null
}
Run Code Online (Sandbox Code Playgroud)
我不想每次都try{} catch()在我的代码中使用它来检查它.为此目的,最佳解决方案是什么?
我认为最好的将是:
obj.getA().getB().getC().getD().isNull()- 为此我需要更改所有的getter,例如实现一些包含isNull()方法的接口.NullObjectHelper.isNull(obj.getA().getB().getC().getD()); - 这将是最好的(我想是这样),但如何实现这一点?在我的项目中,我使用了一些本地依赖项:
dependencies {
compile files('lib/mylib.jar')
}
Run Code Online (Sandbox Code Playgroud)
为什么当我打电话时我gradle dependencies看不到这个库是一个依赖?命令gradle dependencies --configuration compile返回:
:dependencies
------------------------------------------------------------
Root project
------------------------------------------------------------
compile - Compile classpath for source set 'main'.
No dependencies
Run Code Online (Sandbox Code Playgroud)
从存储库(maven/ivy)下载的依赖项是可见的.例如:
repositories {
mavenCentral()
}
dependencies {
compile 'com.google.guava:guava:14.0.1'
}
Run Code Online (Sandbox Code Playgroud)
将会呈现:
:dependencies
------------------------------------------------------------
Root project
------------------------------------------------------------
compile - Compile classpath for source set 'main'.
\--- com.google.guava:guava:14.0.1
BUILD SUCCESSFUL
Run Code Online (Sandbox Code Playgroud)
我还应该补充说,没有显示依赖项,但项目编译正确.
我们有很多由apache poi生成的excel报告.其中一些包含标题中的注释.由于许多报告,我们希望创建用于添加注释的通用解决方案.我们注意到可以通过以下代码将注释添加到单元格中:
public static void addComment(final Workbook workbook, final Sheet sheet, final Cell cell, final Row row,
final String comment) {
final CreationHelper factory = workbook.getCreationHelper();
final Drawing drawing = sheet.createDrawingPatriarch();
final ClientAnchor anchor = factory.createClientAnchor();
anchor.setCol1(cell.getColumnIndex());
anchor.setCol2(cell.getColumnIndex() + 3);
anchor.setRow1(row.getRowNum());
anchor.setRow2(row.getRowNum() + 5);
final Comment cellComment = drawing.createCellComment(anchor);
final RichTextString richText = factory.createRichTextString(comment);
cellComment.setString(richText);
cell.setCellComment(cellComment);
}
Run Code Online (Sandbox Code Playgroud)
我们还注意到注释框大小可以使用列/行索引设置 - 这是我们的主要问题,因为如果第一列有100px而第二列有1000px,那么注释宽度将是1000px.这是我们的问题 - 是否有可能使用apache poi设置带像素的注释大小而不是列/行索引?或者也许有一些方法可以自动计算apache poi的评论大小?