首页 > 解决方案 > 模型类可以实现模型UI吗?

问题描述

到目前为止,在我使用 Spring Boot 的 Java 代码中,我使用模型或 POJO 对象来更好地控制我的对象等。通常我正在创建实体、存储库、服务、Rest 控制器,就像文档和课程所建议的那样。但是现在我正在使用 Thymeleaf 模板、HTML 和一些 Bootstrap 和 CSS 来创建浏览器界面。对于中的方法@Controller,作为参数,我从 Spring Model UI 传递 Model,如下所示:

@GetMapping("/employees")
private String viewAllEmployees(Model employeeModel) {
    employeeModel.addAttribute("listEmployees", employeeService.getAllEmployees());
    return "employeeList";
}

我的问题是:如何使用我的 POJO 对象而不是 org.springframework.ui.Model;?

我的第一个猜测是:

public class EmployeeModel implements Model{

private long employeeId;
private String firstName;
private String lastName;
private String email;
private String phone;
private long companyId;
//getter and setter methods
}

为了做到这一点,我必须对适合我的@Override方法建模。看起来 Java、Spring 等在编译时不会抱怨,我可以@Controller像这样使用这个 POJO 对象:

@Controller
public class EmployeeController {
@Autowired 
private EmployeeService employeeService;    
@GetMapping("/employees")
private String viewAllEmployees(EmployeeModel employeeModel) {
    employeeModel.addAttribute("listEmployees", employeeService.getAllEmployees());
    return "employeeList";
}}

我运行代码并启动,显示我的 /home 端点,它很酷,但是当我想去我的 /employees 端点时,它应该显示我的员工列表,它会抛出这个:

Method [private java.lang.String com.bojan.thyme.thymeApp.controller.EmployeeController.viewAllEmployees(com.bojan.thyme.thymeApp.model.EmployeeModel)] with argument values:[0] [type=org.springframework.validation.support.BindingAwareModelMap] [value={}] ] with root cause java.lang.IllegalArgumentException: argument type mismatch

例外。

请注意,Rest 控制器在浏览器和 Postman 中运行良好。

字符串作为一种方法是否可能是问题所在?我的方法应该是其他类型,List<EmployeeModel>还是EmployeeModel 本身?如果是这样,如何告诉方法我希望返回我的employeeList.html?

我真诚地希望有人能用这个来阻止我:)

标签: javaspringspring-bootspring-mvcthymeleaf

解决方案


如何使用我的 POJO 对象而不是 org.springframework.ui.Model;?

当您使用 Thymeleaf 时,我认为这不是最佳做法。根据他们的文档,您应该将您的对象附加到您的模型。因此,在您的控制器中,您将操纵包含您的 Pojos 的模型。

例子:

 @RequestMapping(value = "message", method = RequestMethod.GET)
    public ModelAndView messages() {
        ModelAndView mav = new ModelAndView("message/list");
        mav.addObject("messages", messageRepository.findAll());
        return mav;
    }

推荐阅读