小编Tin*_*Sky的帖子

在Java中返回多个值的最佳实践?

今天我在登录表单后面添加了额外的安全检查,以减缓暴力攻击.我有多个登录表单,并且做了一个很好的易于调用的函数,它执行所有检查,然后返回结果.

public static ValidateLoginResult validateLogin(HttpServletRequest request, String email, String password) {
Run Code Online (Sandbox Code Playgroud)

问题是结果不是单个值,结果包括:

boolean ok
String errorMessage
boolean displayCaptcha
Run Code Online (Sandbox Code Playgroud)

为此我创建了一个新类.一切正常.

但是我经常有一些方便的实用程序函数返回多个值,并且开始发现每次为结果创建一个新类有点烦人.

有没有更好的方法来返回多个值?还是我只是懒惰?:)

java return function

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

使用Datastax Cassandra驱动程序时重用PreparedStatement?

我目前正在使用Cassandra 2的Datastax Cassandra驱动程序来执行cql3.这工作正常.我开始使用PreparedStatement's:

Session session = sessionProvider.getSession();
try {
    PreparedStatement ps = session.prepare(cql);
    ResultSet rs = session.execute(ps.bind(objects));
    if (irsr != null) {
       irsr.read(rs);
    }
}
Run Code Online (Sandbox Code Playgroud)

有时我会在日志中收到驱动程序的警告:

Re-preparing already prepared query . Please note that preparing the same query more than once is generally an anti-pattern and will likely affect performance. Consider preparing the statement only once.
Run Code Online (Sandbox Code Playgroud)

这个警告是有道理的,但我不确定我应该如何重用PreparedStatement

我应该只是PreparedStatement在构造函数/ init方法中创建我的所有内容而不是简单地使用它们吗?

但是当多个线程同时使用相同的线程PreparedStatement时(特别是调用PreparedStatement.bind()绑定对象),这是否顺利

java cassandra datastax-java-driver

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

Eclipse luna没有字段名称完成?

我目前正在使用eclipse luna,它非常好用.

在eclipse kepler中我可以做到以下几点:

private VoteService vote(press CTRL+SPACE)
Run Code Online (Sandbox Code Playgroud)

按下CTRL + SPACE后,我会得到一个小菜单,我可以选择"voteService".结果将是:

private VoteService voteService
Run Code Online (Sandbox Code Playgroud)

现在我只得到一个小菜单:

在此输入图像描述

如您所见,缺少"voteService"项.我怀疑这被称为"字段名称完成"或类似的东西.所有其他完成工作正常.

如何让"字段名称完成"再次起作用?在浏览内容辅助选项时我有点迷失:)(我已启用(作为测试)内容辅助中的所有提案类型>高级但仍然没有字段/变量名称完成)

[更新]它似乎在一个方法体中工作.奇怪的是,它不适用于类变量,例如:

public class Burb {
private VoteService vote(CTRL+SPACE)
Run Code Online (Sandbox Code Playgroud)

eclipse

9
推荐指数
1
解决办法
661
查看次数

Bootstrap中的固定宽度表列

我正在使用bootstrap 3作为后端应用程序,此应用程序在表格中显示数据.在每行的末尾有一个删除按钮(有时还有一个编辑按钮).

我使用col-md-1作为具有删除按钮的列,并且其他列上的col-md-x的变体可以正常工作.

让我感到困惑的一件事是,当我放大浏览器窗口时,col-md-1列会变得很大,因为自举网格设计很有意义.这是一个截图:

在此输入图像描述

但是每当我看到它时它仍然会让我感到烦恼.

是否可以为列提供固定宽度,例如32像素,同时继续使用我真正喜欢的bootstrap的col-md-x功能?

[编辑]可能澄清:我正在寻找最大宽度,例如最小宽度32和最大宽度32,然后列不应该增长到超过32像素,并且不应缩小到小于32像素.

css twitter-bootstrap

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

JPA 多线程添加如果不存在?

我有一个服务器函数,它被许多客户端同时多次调用。服务器功能执行以下操作:

  • 从客户端获取 param1
  • 创建对象x(新对象x(param1))
  • 检查对象 x 是否存在于 db (jpa select query)
  • 如果不存在,则添加对象 x​​(jpa 商店实体)
  • 添加 y(jpa 商店实体)

当两个或多个客户端同时运行该函数时,这会出错,多个 x 对象被添加到数据库中。

我只是通过创建一个具有上述同步方法的单例管理器类来解决这个问题。

效果很好,因为现在一次只能由一个客户端调用该函数。(但是当有 2 个服务器时我确实遇到了问题,但事实并非如此)

但我想知道有没有更好的方法可以用 jpa 解决这个问题?

java jpa

5
推荐指数
2
解决办法
4396
查看次数

@Autowired在@Service?

我无法让@Autowired在@Service注释的类中工作,自动变量始终为null.让我解释:

@Service
public class Searcher extends Thread implements ISearcher {
@Autowired
protected ISessionProvider sessionProvider; <-- always null
...
public Searcher() {
sessionProvider.doSomeStuff();
}
Run Code Online (Sandbox Code Playgroud)

sessionProvider总是为null.

奇怪的是@Controller中的相同autowire确实有效:

@Controller
@RequestMapping("/search")
@Secured({ "ROLE_USER" })
public class SearchController  extends BaseController {
@Autowired
protected ISessionProvider sessionProvider; <-- does work 
@Autowired
protected ISearcher searcher;
Run Code Online (Sandbox Code Playgroud)

最后一行抛出异常,因为Searcher的构造函数(实现ISearcher)尝试访问sessionProvider,它是null.

我不确定我可能做错了什么,看起来Spring并没有自动装配Searcher中的ISessionProvider.

可能是春天首先在SearchController中自动装配Searcher,但它应首先在Searcher中自动装配SessionProvider,然后在SearchController中自动装配Searcher.如果没有有效的SessionProvider,则无法自动装配搜索者.困惑我的大脑;-)

有人可以提供帮助大脑吗?

[编辑]

  • 组件扫描包括我的服务,控制器和所有内容,只需检查.
  • 我之前的界面确实不是很好(老习惯)
  • 不确定这是否是一个"重复"的问题,主要是因为我没有做任何与"新"有关的事情,我让春天做所有艰苦的工作,但我会更好地看一眼.

java spring

5
推荐指数
2
解决办法
6745
查看次数

计算两种颜色之间的颜色?

我需要可视化一个数字列表,这个列表每x分钟生成一次.我目前在侧面使用带有数字的单行.这可以正常工作,但在进行实时分析时,它会变得很难看.

在想了一下之后,我想出了对数字进行颜色编码的想法,一个大的负数是红色的,一个大的正数是绿色的,一个正常的正数是浅绿色,略大于绿色和浅绿色之间的正常数字.

为了说明它,我做了一个图像:

在此输入图像描述

对我的问题.例如,我们有:

50: Color.green
0: Color.white
-50: Color.red
Run Code Online (Sandbox Code Playgroud)

如何计算代表25的颜色?

java algorithm colors

4
推荐指数
1
解决办法
937
查看次数

什么时候使用keepalive调用channelInactive?

我有一个SimpleChannelInboundHandler来处理一些http请求:

CacheServerHandler extends SimpleChannelInboundHandler<FullHttpRequest>
Run Code Online (Sandbox Code Playgroud)

如果我没有明确关闭通道/连接并且keepalive为true,那么每次完成channelRead0后都会调用channelInactive吗?

或者只在通道/连接关闭时调用一次channelInactive?

我问这个是因为当http连接上的keepalive为true时,客户端不会关闭连接,客户端可以发送多个请求而无需打开/关闭连接.

java netty

4
推荐指数
1
解决办法
4392
查看次数

spring 中带有 url-pattern 重定向的上下文路径

我对 tomcat 服务器上的路径和 url 有点困惑,让我解释一下:

我的tomcat webapp目录是:/server

我已经在目录 /server/myapp/subfolder 中部署了一个 spring 应用程序

这意味着我的上下文路径 /server/myapp

我的 servlet 的 url-pattern 为 /subfolder/*

我的 servlet 可以通过 url http://server.com/myapp/subfolder/ 访问

在我的许多弹簧控制器中,我返回一个重定向:

return "redirect:/item/list";
Run Code Online (Sandbox Code Playgroud)

这会将访问者重定向到http://server.com/myapp/item/list

这当然会导致 404,因为正确的 url 是:http : //server.com/myapp/subfolder/item/list

这可以通过将所有内容都放在一个单独的 web 应用程序中或简单地删除 url-pattern 来轻松解决。但两者都不可能,因为单独的 webapp 意味着不同的类加载器(导致其他系统出现问题),并且像 / 这样的 url-pattern 将与服务器上运行的其他应用程序冲突。

我可以将重定向更改为“重定向:/子文件夹/项目/列表”,这将修复重定向。

是否有更好的解决方案,以便我不必在使用上下文路径的任何地方手动添加“子文件夹/”?

java spring tomcat

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

@RolesAllowed在Jersey中不使用自定义SecurityContext?

我有一个简单的球衣2.4资源:

@RolesAllowed("admin")
public List<Folder> list(){}
Run Code Online (Sandbox Code Playgroud)

我还有一个ContainerRequestFilter,它设置自定义securitycontext:

public void filter(ContainerRequestContext requestContext) throws IOException {
requestContext.setSecurityContext(new MySecurityContext(...));
}
Run Code Online (Sandbox Code Playgroud)

在list()函数中,我确实得到了正确的securitycontext:MySecurityContext.并且调用"securityContext.isUserInRole("admin")"有效.

但注释@RolesAllowed似乎没有做任何事情,永远不会调用MySecurityContext的函数isUserInRole.

我需要做一些特别的事情来让@RolesAllowed工作吗?

java rest jersey

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

在屏幕上绘制一个8x8矩形变为9x9矩形?

g2.fill(new Rectangle2D.Double(0, 0, 8, 8));
Run Code Online (Sandbox Code Playgroud)

这很好地填充了一个8x8的矩形.

但是当我尝试绘制8x8矩形边框时会发生奇怪的事情:

g2.draw(new Rectangle2D.Double(0, 0, 8,8));
Run Code Online (Sandbox Code Playgroud)

这将绘制一个9x9矩形矩形.

在此输入图像描述

但我指出它应该是8宽和8高.

我的默认笔划宽度为1.

我忽略了什么吗?也许更好的问题是:我可以将其关闭以便在调用draw时获得8x8矩形吗?

java swing graphics2d

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