小编Ale*_*eld的帖子

Spring MVC在控制器或服务层中的验证?

很长一段时间,我试图弄清楚应该在Spring MVC应用程序中进行用户输入的验证.在许多在线博客和教程中,我基本上读到控制器应验证用户输入,如果无效,则通过显示包含错误消息的页面来响应用户.然而,我目前对Spring和Spring MVC分层系统的理解是,Controller是应用程序逻辑(服务层)和"Web世界"之间唯一的浅层接口,允许从Web使用服务层.另外,据我所知,Spring MVC仅提供合理的Controller验证工具.

如果现在验证发生在Controller中,如果稍后我想解开"web world"中的应用程序逻辑,则必须在新环境中重新实现验证逻辑(例如使用Swing的桌面应用程序).在我看来,决定哪些操作在域对象上"有效"以及这些对象可能具有哪些"有效"状态的能力是服务层的核心部分,而不是应用程序的其他部分的关注(例如控制器).

在这种情况下,为什么将输入验证逻辑放在控制器层而不是服务层是"良好实践"?

java validation spring spring-mvc

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

Spring JdbcTemplate/NamedParameterJdbcTemplate将null值作为参数值传递

我有一个问题,使用spring框架的MapSqlParameterSource将null值传递给NamedParameterJdbcTemplate.谁知道怎么做?

目前我的代码是:

String sql = "update person set project = :project where id = :id;";
MapSqlParameterSource params = new MapSqlParameterSource();
params.addValue("project ", null);
params.addValue("id ", 1);
int count = newNamedParameterJDBCTemplate().update(sql, params);
Run Code Online (Sandbox Code Playgroud)

这是我得到NullPointerException的地方.

spring jdbc jdbctemplate

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

Java集合线程安全地将集合对象从一个线程传递到另一个线程

我有一个Java应用程序,它有工作线程来处理作业.一个worker产生一个结果对象,比如说:

class WorkerResult{
    private final Set<ResultItems> items;
    public Worker(Set<ResultItems> pItems){
         items = pItems;
    }
}
Run Code Online (Sandbox Code Playgroud)

当工人完成时,它执行此操作:

 ...
 final Set<ResultItems> items = new SomeNonThreadSafeSetImplSet<ResultItems>();
 for(Item producedItem : ...){
      items.add(item);
 }
 passToGatherThread(items);
Run Code Online (Sandbox Code Playgroud)

这套items装置在这里是一种"工作单元".该passToGatherThread方法将items集合传递给一个收集线程,其中只有一个在运行时存在.

这里不需要同步,因为竞争条件不会发生,因为只有一个线程(Gather-thread)读取该items集合.AFAICS,Gather-thread可能看不到所有项目,因为该集合不是线程安全的,对吧?

假设我无法进行passToGatherThread同步,因为它是第三方库.我基本上担心的是收集线程由于缓存,VM优化等而没有看到所有项目.所以这里出现了一个问题:如何以线程安全的方式传递项目集,以便Gather线程"看到"适当的项目?

java thread-safety

11
推荐指数
1
解决办法
1762
查看次数

使用zeromq PUB/SUB套接字检索订户计数

是否有可能从zeromq的PUB套接字中获取订户总数?

谢谢!

zeromq

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

在ZeroMQ中获取TCP地址信息

我想使用ZeroMQ(java绑定,jzmq)将客户端连接到服务器,但我需要严重的TCP信息,例如客户端请求的TCP/IP地址!问题是,为了能够在网络中宣布服务,我需要获取请求的TCP地址,以便能够将客户端重定向到该服务.在这种情况下,经纪人是一个中央"服务注册机构".但是,双方都有ZeroMQ服务,我没有看到检索该信息的选项.

我现在所做的是使用标准套接字建立到代理的虚拟连接,在建立连接后,我获取用于此连接的IP地址并再次关闭连接.已检索到的IP地址现在用于在随机端口上使用ZeroMQ套接字绑定它.

我认为这个解决方案是有史以来最丑陋的解决方案,因此:对这个问题有什么更好的解决方案?

问候.

sockets service-discovery zeromq jzmq

9
推荐指数
2
解决办法
5743
查看次数

Spring MVC - 缺少字段的HTTP状态代码400(错误请求),定义为不需要

我有这个控制器方法的Spring MVC应用程序.

@RequestMapping(value = "/add", method = RequestMethod.POST)
public String addNumber(@RequestParam(value="number", required=false) Long number) {
   ...
   return "redirect:/showAll/";
}
Run Code Online (Sandbox Code Playgroud)

在我的JSP中,我有一个标准的HTML表单,它将一个名为"number"的值发布到上面的控制器方法中.但是,如果我省略了值(不在文本字段中输入任何内容)并将数据POST到控制器,则在调用控制器方法之前,我的浏览器显示

HTTP Status 400 - Required Long parameter 'number' is not present
Run Code Online (Sandbox Code Playgroud)

尽管控制器方法注解明确规定-parameter为"数字" 必需的.

有没有人对可能发生的事情略有了解?

谢谢.

PS:抛出的异常如下:

org.springframework.web.bind.MissingServletRequestParameterException: Required Long parameter 'number' is not present
Run Code Online (Sandbox Code Playgroud)

编辑:这是一个Spring 3.2.3.RELEASE错误(见这里).使用版本3.1.4.RELEASE我不再有这个问题了.

spring spring-mvc spring-annotations

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

使用Spring MVC向用户呈现服务级别验证错误的良好实践

在使用Spring MVC验证器执行"浅"用户输入验证后,是否有一些使用Spring MVC呈现服务层验证错误的良好实践?例如,拥有以下代码:

@Autowired
private UserService userService;

@RequestMapping(value = "user/new", method = RequestMethod.POST)
public String createNewUser(@ModelAttribute("userForm") UserForm userForm, BindingResult result, Model model){
    UserFormValidator validator = new UserFormValidator(); //extending org.springframework.validation.Validator
    validator.validate(userForm, result);

    if(result.hasErrors()){
        model.addAttribute("userForm", userForm);
        return "user/new";
    }

    // here, for example, the user already might exist
    userService.createUser(userForm.getName(), userForm.getPassword());

    return "redirect:user/home";
} 
Run Code Online (Sandbox Code Playgroud)

虽然将此代码作为示例似乎微不足道,但在服务层验证是一项复杂的任务时,对我来说似乎是一个微妙的故事.尽管是一个荒谬的场景,UserService可能会创建一个用户列表,如果其中一个已经存在,那么必须以某种方式通知视图层哪些用户无效(例如已经存在).

我正在寻找一个如何设计一段代码的良好实践,这使得它成为可能

1)处理具有复杂数据作为输入的服务层的验证错误,和

2)向用户呈现这些验证错误

尽可能简单.有什么建议?

java validation spring spring-mvc

8
推荐指数
2
解决办法
7182
查看次数

Ruby递归问题

我想知道为什么第一种阶乘方法在红宝石中不起作用(无限循环)而第二种方法起作用.

def fac (x)
  if x == 0
    return 1
  else
    return (fac (x-1) * x)
  end
end

def fact( num )
  return 1 if num == 0

  fact(num - 1) * num
end
Run Code Online (Sandbox Code Playgroud)

ruby recursion

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

C#Outlook从收件人获取CompanyName属性

我目前正在使用C#编写Outlook 2010 AddIn.我想要的是从我从AppointmentItem拉出的Recipient对象中获取CompanyName属性.因此,拥有AppointmentItem的收件人我想找出每个收件人的CompanyName,它可能是一个ExchangeUser.

我的代码是这样的:

Recipients recipients = appointmentItem.Recipients;
foreach (Recipient rec in recipients)
{
    resolved = rec.Resolve();
    if (resolved)
    {
       ContactItem contactItem = rec.AddressEntry.GetContact();
       String companyName = contactItem.CompanyName;       
       // ...
    }
Run Code Online (Sandbox Code Playgroud)

其中contactItem始终为null.

做这样的事也会导致空指针.

ExchangeUser u = rec.AddressEntry.GetExchangeUser();
companyName = u.CompanyName;
Run Code Online (Sandbox Code Playgroud)

我根本无法获取CompanyName信息.我知道这些信息确实存在.但是,除了CompanyName之外,还有许多其他属性似乎也会产生NULL指针.

有人可以给我一个暗示吗?

提前致谢.

c# outlook add-in

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

j_spring_security_check 404问题

我试图让我的spring + hibernate + spring-security和tiles2 - "HelloWorld"应用程序工作,遵循本指南(不幸的是它在德语).

我的问题是登录我的应用程序时收到"404"错误消息.重定向到登录页面按预期工作,但是当我点击登录按钮时,我无法访问" http:// localhost:8080/App/j_spring_security_check ".

我的web.xml看起来像这样:

<context-param>
    <param-name>contextConfigLocation</param-name>
    <param-value>
        /WEB-INF/defs/applicationContext.xml
        /WEB-INF/defs/applicationContext-security.xml
    </param-value>
</context-param>

<filter>
    <filter-name>springSecurityFilterChain</filter-name>
    <filter-class>org.springframework.web.filter.DelegatingFilterProxy</filter-class>
</filter>

<filter-mapping>
  <filter-name>springSecurityFilterChain</filter-name> 
  <url-pattern>/*</url-pattern>
</filter-mapping>

<listener>
    <listener-class>org.springframework.security.web.session.HttpSessionEventPublisher</listener-class>
</listener>
Run Code Online (Sandbox Code Playgroud)

和applicationContext-security.xml文件看起来这样......

<http use-expressions="true">
    <intercept-url pattern="/index.html" access="permitAll" />
    <intercept-url pattern="/timeout.html" access="permitAll" />
    <intercept-url pattern="/redirect.html" access="permitAll" />
    <intercept-url pattern="/media/**" access="permitAll" />
    <intercept-url pattern="/includes/**" access="permitAll" />
    <intercept-url pattern="/office/**" access="hasRole('ROLE_USER')" />
    <intercept-url pattern="/office/admin/**" access="hasRole('ROLE_ADMIN')" />

    <form-login login-page="/index.html" 
            authentication-failure-url="/index.html?login_error=1"
            default-target-url='/office/kunden.html'
            always-use-default-target='true'
            />
    <logout logout-success-url="/index.html" />
    <remember-me />
    <session-management invalid-session-url="/index.html">
        <concurrency-control max-sessions="2" error-if-maximum-exceeded="true" /> …
Run Code Online (Sandbox Code Playgroud)

java spring spring-security

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