一步步学习 《Spring 实战 第5版》--(7)创建订单页面

上一章我们创建了配料选择页面,用户在选择好订单后,我们的控制器会跳转到一个订单页面。目前我们的订单页面还没有实现,将在这一章完成它。

前面一章,我们在接收到用户的配料选择信息后,控制器的代码会跳转到订单页面,这个跳转,是通过“重定向”来实现的,语法就是返回的字符串中带有“redirect:”前缀。具体是这样的:

 return "redirect:/orders/current";

它表示在方法完成后的页面跳转中,用户的浏览器将会重定向到相对路径是“/order/current”中去。

重定向到这个路径之后做什么呢?同样,这样会触发一个控制器,由这个控制器来决定后面怎么做。那么接下来我们来设计处理“/order/current”的控制器。

一、订单控制器

同样的,我们会使用@Controller、@RequestMapping和@GetMapping注解来实现这个控制器,具体代码如下:

import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;

@Slf4j
@Controller
@RequestMapping("/orders")
public class OrderController {
    
    @GetMapping("/current")
    public String OrderForm(Model model){
        model.addAttribute("order",new Order());
        return "orderForm";
    }
}

同样也使用了@Slf4j注解,以备后续使用日志功能。@RequestMapping和@GetMapping的组合使用,使得这个控制器能够处理“/order/current”的Get请求。

在IDE的报错中我们可以看到,Order类的实现还没有开发,我们接下来写Order类。

二、订单类的开发

订单类仍然是个领域对象,实现了具体的业务逻辑。领域的概念我们在第二章已经简单介绍了,它是领域驱动设计中的一个概念,可以将业务逻辑和程序控制逻辑相分离,领域对象就是单纯的体现业务逻辑,这里的订单,明显就是一个领域业务概念。

订单类的代码如下。

@Data
public class Order {
    private String name;
    private String street;
    private String city;
    private String state;
    private String zip;
    private String ccNumber;
    private String ccExpiration;
    private String ccCVV;
    
}

我们仍然使用了lombok类库的@Data注解,帮助我们后台实现了默认的get、set方法。

三、订单视图

我们在第一部分的控制器中,控制器会返回到一个名为 "orderForm"的逻辑视图。现在我们实现这个视图,仍然采用Thymeleaf模板。具体代码如下。




  
    Taco Cloud
    
  

  

    

Order your taco creations!

Design another taco
Please correct the problems below and resubmit.

Deliver my taco masterpieces to...

Name Error
Street Error
City Error
State Error
Zip Error

Here's how I'll pay...

CC Num Error
CC Num Error
CC Num Error

这是一个典型的Tymeleaf模板,这里特别的是,在这段代码中,特别指定了表单的“action”。如果不特别指定“action”,表单的POST动作将会以表单相同的URL提交到控制器,如果指定了,则按指定的路径提交,这里是按照“/orders”的路径提交。

四、Post控制器

既然订单页面会按照“/orders”的路径提交POST请求,那么我们还要添加其控制器。

在OrderController控制器类中增加如下代码:

    @PostMapping
    public String ProcessOrder(Order order){
        log.info("order submitted:" + order);
        return "redirect:/";
    }

现在在这个控制器中,会将用户的请求继续重定向到根路径,就是我们默认的主页视图了。

五、结论 忘记了重要的一点--测试

我们一直没有利用好Spring提供的自动测试框架。后面一章我们专门讨论下自动化测试如何实现。

你可能感兴趣的:(一步步学习 《Spring 实战 第5版》--(7)创建订单页面)