如何用@RestController替换@Controller?

问题描述 投票:0回答:2

这是我的

TeacherController

@Controller
@RequestMapping("/teacherController")
public class TeacherController {
private static final String TEACHER_MODEL = "teacher";
@Autowired
TeacherService teacherService;


@RequestMapping("check")
public ModelAndView index() {
    ModelAndView modelAndView = new ModelAndView();
    modelAndView.addObject("teachers", teacherService.getAll());
    modelAndView.setViewName("/teacherViews/teachersPage");
    return modelAndView;
}

这是我打印表格的页面:

<table  class="table table-dark" border="1" width="100%" cellpadding="5">
<thead>
<tr>
    <th>Teacher ID</th>
    <th>Teacher Name</th>
    <th>Teacher Position</th>
</tr>
</thead>
<tbody id="teacherBody">
<tr th:each="teacher : ${teachers}">
    <td th:text="${teacher.teacherId}" />
    <td th:text="${teacher.teacherName}" />
    <td th:text="${teacher.position}" />
</tr>
</tbody>

我上面写的所有内容都需要使用 RestController 和 AJAX 重写。 我希望表格数据随加载页面自动加载,据我了解,它可以与

js
一起使用。

所以,我的问题是我需要用 AJAX 将我的控制器重写为 RestController,但我不明白该怎么做。

提前感谢您的帮助!

java ajax spring spring-restcontroller
2个回答
1
投票

@Controller 和 @Rest Controller 的区别

@控制器

@Controller 注解长期以来一直是框架的一部分。@Controller 注解指定被注解的类是一个控制器。它是 @Controller 的特化,并通过类路径扫描自动检测。它通常与基于 @RequestMapping 注释的注释处理程序方法合并使用。

例如,

@Controller
@RequestMapping("users")
public class HomeController {

    @GetMapping(produces = "application/json")
    public @ResponseBody User getAllUsers() {
        return findAllUsers();
    }
}

请求处理方法用@ResponseBody注解。此注释可以将返回对象自动序列化到 HttpResponse 中。

@RestController

Spring 4.0 中引入了 @RestController 注解,以简化 RESTful Web 服务的生成。这是一个结合了 @Controller 和 @ResponseBody 的便捷注解

例如,

@RestController
@RequestMapping("users")
public class HomeController {

    @GetMapping(produces = "application/json")
    public Book getAllUsers() {
        return findAllUsers();
    }
}

控制器使用@RestController注释进行注释,因此不需要@ResponseBody。控制器类的每个请求处理方法都会自动将返回对象序列化为 HttpResponse。

转换后

休息控制器

import java.util.List;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
@RequestMapping("/api/v1")
public class TeacherController {

    @Autowired
    TeacherService teacherService;

    @GetMapping("/teacher")
    public List<Teacher> fetchAllTeacher() {
        return teacherService.getAll();
    }
}

HTML

<table id="table-content" border='1'>
<tr>
    <th>Teacher ID</th>
     <th>Teacher Name</th>
    <th>Teacher Position</th>
</tr>

Javascript(未测试)

var service = 'http://localhost/api/v1/';

$(document).ready(function(){

    jQuery.support.cors = true;

    $.ajax(
    {
        type: "GET",
        url: service + '/teacher/',
        data: "{}",
        contentType: "application/json; charset=utf-8",
        dataType: "json",
        cache: false,
        success: function (data) {
            
        var trHTML = '';
                
        $.each(data, function (i, item) {
            
            trHTML += '<tr><td>' + data.Teacher[i].Name + '</td><td>' + data.Teacher[i].Position + '</td></tr>';
        });
        
        $('#table-content').append(trHTML);
        
        },
        
        error: function (msg) {
            
            alert(msg.responseText);
        }
    });
})

0
投票

Spring MVC @Controller 经典控制器可以使用 @Controller 注释进行注释。这只是 @Component 类的特化,并允许通过类路径扫描自动检测实现类。

@Controller 通常与请求处理方法上使用的 @RequestMapping 注释结合使用。

让我们看一个 Spring MVC 控制器的简单示例:

@控制器

@RequestMapping(“书籍”) 公共类 SimpleBookController {

@GetMapping("/{id}", produces = "application/json")
public @ResponseBody Book getBook(@PathVariable int id) {
    return findBookById(id);
}

private Book findBookById(int id) {
   
}

}

请求处理方法用@ResponseBody注解。此注释可以将返回对象自动序列化到 HttpResponse 中。

Spring MVC @RestController @RestController 是控制器的特殊版本。它包含 @Controller 和 @ResponseBody 注释,因此简化了控制器实现:

@RestController

@RequestMapping(“书籍休息”) 公共类 SimpleBookRestController {

@GetMapping("/{id}", produces = "application/json")
public Book getBook(@PathVariable int id) {
    return findBookById(id);
}

private Book findBookById(int id) {
    
}

}

控制器使用@RestController注释进行注释,因此不需要@ResponseBody。

控制器类的每个请求处理方法都会自动将返回对象序列化为 HttpResponse。

© www.soinside.com 2019 - 2024. All rights reserved.