从JSP,Servlet等迁移现有项目到Spring Boot MVC multi Dispatcher

时间:2017-11-23 17:03:07

标签: hibernate spring-mvc servlets spring-boot jersey

我需要将旧项目转换为Spring Boot和MVC 在旧版本中使用的技术是JSP,Servlet,Hibernate,JPA,Jersey

我需要帮助才能以最小的努力完成所有这些工作。

  1. 如何将web.xml转换为SpringBoot Configauration,问题是 - MVC也有dispatcher
  2.          <servlet>
        <servlet-name>Jersey Web Application</servlet-name>
            <servlet-class>org.glassfish.jersey.servlet.ServletContainer</servlet-class>
            <init-param>
                <param-name>jersey.config.server.provider.packages</param-name>
                <param-value>rest</param-value>
            </init-param>
            <load-on-startup>1</load-on-startup>
        </servlet>
        <servlet-mapping>
            <servlet-name>Jersey Web Application</servlet-name>
            <url-pattern>/webapi/*</url-pattern>
        </servlet-mapping>

    1. 如何通过最少的代码更改来完成此操作?

      @Path("/aaccess")
      public class RestAAccess {
      @GET
      @Path("/get/{id}")
      @Produces("application/json")
      @Consumes("application/x-www-form-urlencoded")
      public Object get(@PathParam("id") int id) {
          //
      }
      
      @POST
      @Path("/doit")
      @Produces("application/json")
      public Object doit(@FormParam("id") int id,
                         @FormParam("role_id") int rid,
                         @FormParam("action") String action,
                         @FormParam("granted") boolean granted,
                         @FormParam("act") String act) {
          //
      }
      

      }

    2. 现有的Dao-Implementation类(没有接口)。如何改变这个

      public class CStaffData {
          public static List<CStaffResult> getByCompany(Session se, ResultPack rp, int id) {
             // --
                  List<CStaffResult> table = se.createQuery("Some SQL").setParameter("id", id).setResultTransformer(Transformers.TO_LIST).list();
             //---    
          }
      }
      

2 个答案:

答案 0 :(得分:1)

1:将server.contextPath=/webapi放在application.properties

2:  
    @RestController
    @RequestMapping("/aaccess")
    public class RestAAccess {

    @RequestMapping(value="/get/{id}",method = RequestMethod.GET)
    public Object get(@PathVariable("id") int id) {
        //
    }

    @RequestMapping(value=""/doit"",method = RequestMethod.POST)
    public Object doit(@RequestBody SampleBody sb) {
        //
    }

class SampleBody{

         int id,

         @JsonProperty(value = "role_id")int rid,

         @JsonProperty("action") String action;

         @JsonProperty("granted") boolean granted;

         @JsonProperty("act") String act;

      ...........getter setters ......
 }

3:更好地使用Respository或Dao正确检查spring文档。

答案 1 :(得分:1)

我找到了解决问题的方法。

我从这里读到的第一个和第二个问题:
http://www.gauravbytes.com/2017/02/spring-boot-restful-webservices-with.html

将此部分添加到pom.xml

&#13;
&#13;
<dependency>
  <groupId>org.springframework.boot</groupId>
  <artifactId>spring-boot-starter-jersey</artifactId>
</dependency>
&#13;
&#13;
&#13;

如果您已经使用了tomcat嵌入,则不需要此部分。一起不会起作用,只是为了获取信息。

&#13;
&#13;
<dependency>
  <groupId>org.springframework.boot</groupId>
  <artifactId>spring-boot-starter-undertow</artifactId>
</dependency>
&#13;
&#13;
&#13;

关于这一点,你可以在这里阅读(第9点):
http://www.baeldung.com/spring-boot-application-configuration

在使用Jersey注释之后,您只需添加@Component注释。

此外,您必须添加注册球衣调度员:

@Configuration
@ApplicationPath("webapi")
public class JerseyConfiguration extends ResourceConfig {
  public JerseyConfiguration() {

  }

  @PostConstruct
  public void setUp() {
    register(RestAAccess.class);
  }
}

如果旧项目存在另一个servlet,您也可以使用下面的代码添加:x` (请阅读此处 - http://www.logicbig.com/tutorials/spring-framework/spring-boot/servlet-component-beans/

Servlet类:

public class MyServlet extends HttpServlet {

    @Override
    protected void doGet (HttpServletRequest req, HttpServletResponse resp)
            throws ServletException, IOException {

        PrintWriter writer = resp.getWriter();
        writer.println("response from servlet ");
    }
}

Congiguration功能(添加您的主类):

@Bean
ServletRegistrationBean myServletRegistration () {
    ServletRegistrationBean srb = new ServletRegistrationBean();
    srb.setServlet(new MyServlet());
    srb.setUrlMappings(Arrays.asList("/path2/*"));
    return srb;
}

关于SessionFactory解决方案尚未就绪(未经测试)。万一,我会添加未来。