GVKun编程网logo

在Spring MVC中扩展带注释的控制器(springmvc注释有哪些)

18

如果您对在SpringMVC中扩展带注释的控制器和springmvc注释有哪些感兴趣,那么这篇文章一定是您不可错过的。我们将详细讲解在SpringMVC中扩展带注释的控制器的各种细节,并对spring

如果您对在Spring MVC中扩展带注释的控制器springmvc注释有哪些感兴趣,那么这篇文章一定是您不可错过的。我们将详细讲解在Spring MVC中扩展带注释的控制器的各种细节,并对springmvc注释有哪些进行深入的分析,此外还有关于java – spring mvc中基于注释的控制器的依赖注入、java – 使用基于Spring MVC注释的控制器和@RequestMapping缩小问题、java – 在Spring MVC中扩展带注释的控制器、java-Spring MVC-带注释的约束验证-错误消息未显示的实用技巧。

本文目录一览:

在Spring MVC中扩展带注释的控制器(springmvc注释有哪些)

在Spring MVC中扩展带注释的控制器(springmvc注释有哪些)

我正在做一个小项目,有一些现有代码,我想避免更改而保持干净,因此我需要扩展一个带注释的控制器,但这不起作用:

package a;@controllerpublic class BaseController {    // Autowired fields    protected x toExtend() {         // do stuff    }    @RequestMapping(value = "/start")    protected ModelAndView setupForm(...) {        toExtend();        // more stuff    }}package b;@controllerpublic class NewController extends BaseController {    // Autowired fields    @Override    protected x toExtend() {         super.toExtend();         //new stuff    }}

软件包a和b被扫描以查找控制器,而我无法更改。我真的没想到这会起作用,因为@RequestMapping(value =“ /
start”)在两个控制器中都是多余的。因此,我得到了一个例外。

所以我的问题是,实际上是否可以在不更改BaseController的情况下扩展注释驱动的控制器?

答案1

小编典典

您可以将一个弹簧控制器扩展到另一个弹簧控制器。

当Spring
MVC控制器扩展另一个Controller时,子控制器可以使用子控制器的请求URL直接使用基本控制器的功能。您可以在此处获取更多详细信息扩展Spring控制器

java – spring mvc中基于注释的控制器的依赖注入

java – spring mvc中基于注释的控制器的依赖注入

如何在 Spring中将属性设置为带注释的控制器?

解决方法

听起来你想要避免@Autowired注释,但你确实想要使用注释式SpringMVC控制器.没有理由你必须同时使用它们.您可以像在任何其他情况下一样在XML中实例化bean.我将在下面给你举个例子.不过,我鼓励你考虑至少使用@Autowired控制器,如果没有其他服务.它使他们的代码更容易创建和阅读,只要你只从控制器使用它,它就不会导致任何尴尬,令人困惑的相互依赖性.

@Controller
public class MyController {

   private String field;

   public void setField(String field) {
      this.field = field;
   }

   @RequestMapping("/Wooo")
   public String handler(ModelMap model) {
      model.addAttribute("thefield",field);
      return "fieldViewer";
   }

}

然后在XML中:

<bean>
  <property name="field">waffles</property>
</bean>

<mvc:annotation-driven/>

java – 使用基于Spring MVC注释的控制器和@RequestMapping缩小问题

java – 使用基于Spring MVC注释的控制器和@RequestMapping缩小问题

考虑一下这个 Spring MVC控制器:
@Controller
@RequestMapping("/test*")
public class TestController {

  @RequestMapping(method = RequestMethod.GET)
  public void doStuff(Model model){
    ...
  }

  @RequestMapping(params = "myParam")
  public void doStuff(@RequestParam("myParam") int myParam,Model model){
    ...
  }

}

当我把它放到我的浏览器中时:

mySite.com/test.html?myParam=1

我期待一个AmbiguousHandlerMappingException或其他东西,因为两个方法似乎都匹配URL.

但实际上第一种方法被调用了.有人知道为什么吗?

解决方法

这闻起来像一个臭虫.如果将method = GET添加到第二个处理程序,它将按预期工作,因此这是解决方法.

我已经就此提交了一份错误报告,希望它能得到解决.

http://jira.springframework.org/browse/SPR-5772

java – 在Spring MVC中扩展带注释的控制器

java – 在Spring MVC中扩展带注释的控制器

我正在开发一个小项目,并且有一些现有的代码,我希望保持清除我的更改,因此我需要扩展一个带注释的控制器,但这不起作用:
package a;

@controller
public class BaseController {
    // Autowired fields

    protected x toExtend() {
         // do stuff
    }

    @RequestMapping(value = "/start")
    protected ModelAndView setupForm(...) {
        toExtend();
        // more stuff
    }
}



package b;

@controller
public class NewController extends BaseController {
    // Autowired fields

    @Override
    protected x toExtend() {
         super.toExtend();
         //new stuff
    }
}

扫描包a和b扫描控制器,我不能改变它.我真的不希望这个工作,因为@RequestMapping(value =“/ start”)在两个控制器中都是冗余的.因此我得到了一个例外.

所以我的问题是,实际上是否可以在不更改BaseController的情况下扩展这样的注释驱动控制器?

解决方法

您可以通过另一个弹簧控制器扩展一个弹簧控制器

当Spring MVC控制器扩展另一个Controller时,子控制器的功能可以由子控制器使用子控制器的请求URL直接使用.你可以在这里获得更多细节Extending Spring controllers

java-Spring MVC-带注释的约束验证-错误消息未显示

java-Spring MVC-带注释的约束验证-错误消息未显示

我希望能够在Web界面中显示我的实体字段约束验证错误.

例如,我在实体上定义了以下约束:

@RooJavaBean
@RooToString
@RooJpaActiveRecord
public class Member {

    @NotNull
    @Email
    @Column(unique = true)
    private String email;

    private String pseudo;

    @NotNull
    @Size(min = 6)
    private String password;

    @NotNull
    @Size(min = 2)
    private String firstName;

    @NotNull
    @Size(min = 2)
    private String lastName;

    @Temporal(TemporalType.DATE)
    @DateTimeFormat(pattern = "dd/MM/yyyy")
    private Date dateOfBirth;

    @NotNull
    @Enumerated
    private Orientation orientation;

    @NotNull
    private String token;

    @NotNull
    @Temporal(TemporalType.TIMESTAMP)
    @DateTimeFormat(pattern = "dd/MM/yyyy")
    private Date registrationDate;

    private boolean activated;
}

我还定义了一个在Spring MVC控制器中使用的辅助JavaBean.这里是:

@RooJavaBean
public class RegistrationInfo {

    private Member member;

    private String passwordConfirmation;

}

这是我的Spring MVC控制器中的相关代码:

@RequestMapping(value = "/registration",method = RequestMethod.POST,produces = "text/html")
public String registerMember(@modelattribute("registrationInfo") @Valid RegistrationInfo registrationInfo,Model model,BindingResult bindingResult) {
    if (!registrationInfo.getMember().getpassword().equals(registrationInfo.getpasswordConfirmation())) {
        bindingResult.addError(new ObjectError("member.password","passwords don't match"));
    }
    if (!registrationService.isEmailAvailable(registrationInfo.getMember().getEmail())) {
        bindingResult.addError(new ObjectError("member.email","email already used"));
    }
    if (bindingResult.hasErrors()) {
        //HOW TO ADD BEAN CONSTRAINTS VALIDATION ERRORS HERE????
        populateForm(model,registrationInfo);
        return "registration";
    }
    registrationService.registerMember(registrationInfo.getMember());
    return "redirect:/";
}

从我的用户界面:

<div id="errors">
            <ul th:if="${#fields.hasErrors('*')}">
                <li th:each="err : ${#fields.errors('*')}" th:text="${err}"></li>
            </ul>
        </div>

但是,到目前为止,将要显示的唯一错误是我手动添加的错误(例如该bindingResult.addError)…

谁能提供建议?

编辑:如果我用@Valid注释成员变量,则在验证表单时会收到此异常:

org.springframework.validation.BindException: org.springframework.validation.BeanPropertyBindingResult: 5 errors
Field error in object 'registrationInfo' on field 'member.password': rejected value []; codes [Size.registrationInfo.member.password,Size.member.password,Size.password,Size.java.lang.String,Size]; arguments [org.springframework.context.support.DefaultMessageSourceResolvable: codes [registrationInfo.member.password,member.password]; arguments []; default message [member.password],2147483647,6]; default message [la taille doit �tre entre 6 et 2147483647]
Field error in object 'registrationInfo' on field 'member.firstName': rejected value []; codes [Size.registrationInfo.member.firstName,Size.member.firstName,Size.firstName,Size]; arguments [org.springframework.context.support.DefaultMessageSourceResolvable: codes [registrationInfo.member.firstName,member.firstName]; arguments []; default message [member.firstName],2]; default message [la taille doit �tre entre 2 et 2147483647]
Field error in object 'registrationInfo' on field 'member.token': rejected value [null]; codes [NotNull.registrationInfo.member.token,NotNull.member.token,NotNull.token,NotNull.java.lang.String,NotNull]; arguments [org.springframework.context.support.DefaultMessageSourceResolvable: codes [registrationInfo.member.token,member.token]; arguments []; default message [member.token]]; default message [ne peut pas �tre nul]
Field error in object 'registrationInfo' on field 'member.registrationDate': rejected value [null]; codes [NotNull.registrationInfo.member.registrationDate,NotNull.member.registrationDate,NotNull.registrationDate,NotNull.java.util.Date,NotNull]; arguments [org.springframework.context.support.DefaultMessageSourceResolvable: codes [registrationInfo.member.registrationDate,member.registrationDate]; arguments []; default message [member.registrationDate]]; default message [ne peut pas �tre nul]
Field error in object 'registrationInfo' on field 'member.lastName': rejected value []; codes [Size.registrationInfo.member.lastName,Size.member.lastName,Size.lastName,Size]; arguments [org.springframework.context.support.DefaultMessageSourceResolvable: codes [registrationInfo.member.lastName,member.lastName]; arguments []; default message [member.lastName],2]; default message [la taille doit �tre entre 2 et 2147483647]
    org.springframework.web.method.annotation.modelattributeMethodProcessor.resolveArgument(modelattributeMethodProcessor.java:111)
    org.springframework.web.method.support.HandlerMethodArgumentResolverComposite.resolveArgument(HandlerMethodArgumentResolverComposite.java:75)
    org.springframework.web.method.support.invocableHandlerMethod.getmethodArgumentValues(invocableHandlerMethod.java:156)
    org.springframework.web.method.support.invocableHandlerMethod.invokeForRequest(invocableHandlerMethod.java:117)
    org.springframework.web.servlet.mvc.method.annotation.ServletinvocableHandlerMethod.invokeAndHandle(ServletinvocableHandlerMethod.java:96)
    org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:617)
    org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:578)
    org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:80)
    org.springframework.web.servlet.dispatcherServlet.dodispatch(dispatcherServlet.java:923)
    org.springframework.web.servlet.dispatcherServlet.doService(dispatcherServlet.java:852)
    org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:882)
    org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:789)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:641)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:722)
    org.springframework.orm.jpa.support.OpenEntityManagerInViewFilter.doFilterInternal(OpenEntityManagerInViewFilter.java:147)
    org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:76)
    org.springframework.web.filter.HiddenHttpMethodFilter.doFilterInternal(HiddenHttpMethodFilter.java:77)
    org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:76)
    org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:88)
    org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:76)
最佳答案
将@Valid添加到RegistrationInfo内的member属性:

@RooJavaBean
public class RegistrationInfo {

    private @Valid Member member;

    private String passwordConfirmation;

}

然后在您的控制器方法中,bindingResult必须紧接在registrationInfo之后:

public String registerMember(@modelattribute("registrationInfo") @Valid RegistrationInfo registrationInfo,BindingResult bindingResult,Model model) {

今天关于在Spring MVC中扩展带注释的控制器springmvc注释有哪些的讲解已经结束,谢谢您的阅读,如果想了解更多关于java – spring mvc中基于注释的控制器的依赖注入、java – 使用基于Spring MVC注释的控制器和@RequestMapping缩小问题、java – 在Spring MVC中扩展带注释的控制器、java-Spring MVC-带注释的约束验证-错误消息未显示的相关知识,请在本站搜索。

本文标签: