小编jav*_*ian的帖子

Hibernate Validator - @Length - 如何为min和max指定单独的消息?

我在我的网络应用程序中使用Hibernate验证器进行表单验证.我在我的String属性中使用@Length注释,如下所示:

@Length(min = 5, message = "The field must be at least 5 characters")
private String myString;
Run Code Online (Sandbox Code Playgroud)

但是,如果String超过50个字符,我需要显示不同的消息.有没有办法使用开箱即用的@Length验证器来做到这一点?我想做的一个例子(编译器不会让我)如下:

@Length(min = 5, message = "The field must be at least 5 characters")
@Length(max = 50, message = "The field must be less than 50 characters")
private String myString;
Run Code Online (Sandbox Code Playgroud)

我试过@Max和@Min但他们没有做我想做的事.任何投入将不胜感激!

java hibernate-validator bean-validation

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

WebApp中的静态ThreadLocal变量 - 是否存在任何安全/性能问题?

我正在研究和试验我的Java Web应用程序中的ThreadLocal变量.我使用ThreadLocal变量在请求之前存储用户名(从会话中收集),然后在请求后删除它.我通过在ServletFilter中调用静态实用程序方法来完成此操作.我不是简单地从会话中检索用户名的原因是因为我继承了一个系统,该系统具有长时间运行的进程,有时需要比会话超时允许的运行时间更长.我的想法是在处理请求之前获取用户名并将其存储在ThreadLocal变量中,这样我就可以在整个请求期间访问用户名,即使它花费的时间超过15分钟.

我的问题是:

这种设计是否存在任何安全/性能问题?如果有,那么什么是更好的解决方案?即使没有任何安全和/或性能问题,也欢迎更好的想法.我的解决方案中的代码段如下所示:

这是我的实用程序类,将在我的过滤器和我需要用户名的任何地方调用.

public abstract class UserUtil {
private static final ThreadLocal<String> threadUser = new ThreadLocal<String>();

public static String getUserId(){
    return threadUser.get();
}

public static void setUserId(String userId){
    threadUser.set(userId);
}

public static void removeUserId(){
    threadUser.remove();
}
}
Run Code Online (Sandbox Code Playgroud)

这是我的servlet过滤器,用于在请求之前设置用户名(并在请求后通过finally块清除它).

public class UserFilter implements Filter {
public void init(FilterConfig filterConfig) throws ServletException {
}

public void destroy() {
}

public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
    try {
        HttpServletRequest request = (HttpServletRequest) servletRequest;
        UserBean userBean …
Run Code Online (Sandbox Code Playgroud)

java session thread-local servlet-filters

12
推荐指数
1
解决办法
6262
查看次数

Hibernate - 使用具有枚举属性的Bean的本机查询和别名?

我在使用hibernate中的本机查询时遇到了麻烦,无法为包含枚举属性的bean设置别名.调用query.list()时,我收到一个InvocationTargetException.我的例子如下:

@Entity(name = "table1")
public class Class1 {
    @Column(name = "col1")
    @NotNull
    private Integer prop1;

    @Column(name = "col2")
    @NotNull
    private String prop2;

    @Column(name = "col3", length = 6)
    @Enumerated(value = EnumType.STRING)
    private MyEnumType prop3;

    // ... Getters/Setters...
}

public List getClass1List(){
    String sql = "select col1 as prop1, col2 as prop2, col3 as prop3 from table1";

    Session session = getSession(Boolean.FALSE);
    SQLQuery query = session.createSQLQuery(sql);
    query.addScalar("col1", Hibernate.INTEGER);
    query.addScalar("col2", Hibernate.STRING);
    query.addScalar("col3", Hibernate.STRING);

    query.setResultTransformer(Transformers.aliasToBean(Class1.class));

    return query.list();
}
Run Code Online (Sandbox Code Playgroud)

在query.addScalar("col3",Hibernate.STRING)调用期间,我不知道col3使用什么类型(枚举类型).Hibernate.String不起作用!我也试图完全关闭类型(query.addScalar("col3"))但我得到了相同的InvocationTargetException.任何人都可以帮我解决这个问题吗?我的模型无法更改,我坚持使用本机SQL查询.任何想法都表示赞赏.

java sql hibernate

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