Java SpringMVC中的Hibernate@Valid奇怪行为

Java SpringMVC中的Hibernate@Valid奇怪行为,java,hibernate,validation,spring-mvc,uri,Java,Hibernate,Validation,Spring Mvc,Uri,首先,我对这个很陌生,如果这个问题是愚蠢的,我很抱歉。我有两个控制器,它们具有类请求映射和要验证的表单: @Controller @RequestMapping("/creditcard") public class CreditCardController { @Autowired //repositories @RequestMapping(value = "/addnewcard", method = RequestMethod.POST) public

首先,我对这个很陌生,如果这个问题是愚蠢的,我很抱歉。我有两个控制器,它们具有类请求映射和要验证的表单:

@Controller
@RequestMapping("/creditcard")
public class CreditCardController {
    @Autowired
    //repositories

    @RequestMapping(value = "/addnewcard", method = RequestMethod.POST)
    public String addNew(
             @ModelAttribute("newCard") @Valid CreditCard creditCard,
            BindingResult bindingResult, Principal principal, Model model) {
        if (bindingResult.hasErrors()) {
            //render error view
        }
        creditCardService.registerNew(creditCard, principal.getName());
        return "redirect:/account";
    }
另一个

@Controller
@RequestMapping("/account")
public class AccountController {
    @Autowired
    //repo

    @RequestMapping("")
    public String showUserProfile(Principal principal, Model model) {
        String username = principal.getName();
        User user = userService.findByUsername(username);
        Account account = user.getAccount();
        List<Payment> payers = paymentService
                .getAllPaymentsForPayerAccount(account.getId());
        model.addAttribute("user", user);
        model.addAttribute("account", account);
        model.addAttribute("payers", payers);
        return "userprofile";
    }
}
@控制器
@请求映射(“/account”)
公共类帐户控制器{
@自动连线
//回购
@请求映射(“”)
公共字符串showUserProfile(主体、模型){
字符串username=principal.getName();
User=userService.findByUsername(用户名);
Account=user.getAccount();
列表付款人=付款服务
.getAllPaymentsForPayerAccount(account.getId());
model.addAttribute(“用户”,用户);
model.addAttribute(“account”,account);
model.addAttribute(“付款人”,付款人);
返回“userprofile”;
}
}
userprofile.jsp上的表单

<form:form cssClass="form-horizontal" modelAttribute="newCard" action="creditcard/addnewcard">
........
</form:form>

........
所有这些在没有
@有效
的情况下都有效。当我添加
@Valid
时,它可以正常工作,当验证失败时(显示带有消息的错误视图),但当它成功时,我得到
404
错误,因为URI不正确-
http://localhost:8080/PaymentSystem/creditcard/creditcard/addnewcard
。这里有一张
/creditcard
是额外的,
@Valid
以某种方式将其添加到我的URI中。我找到了解决这个问题的方法: 1) 我将
addNew
card方法移动到“AccountController”

2) 我刚刚删除了
@RequestMapping(“/creditcard”)


但我仍然找不到对这种行为的任何解释。有什么想法吗?

我找到了解决这个问题的第三种方法,最适合这种情况。我刚刚将
${pageContext.request.contextPath}
添加到我的操作参数中,如下所示:

<form:form cssClass="form-horizontal" modelAttribute="newCard" action="${pageContext.request.contextPath}/creditcard/addnewcard">
........
</form:form>

........

但它仍然不知道这种@Valid行为的原因。

我找到了解决这个问题的第三种方法,最适合这种情况。我刚刚将
${pageContext.request.contextPath}
添加到我的操作参数中,如下所示:

<form:form cssClass="form-horizontal" modelAttribute="newCard" action="${pageContext.request.contextPath}/creditcard/addnewcard">
........
</form:form>

........
但它仍然不知道这种“有效”行为的原因