1. Последний штрих
Общие аннотации Spring MVC следующие:
1. @Controller
@Controller
Аннотация к классу, указывающая, что классSpring
MVC
внутриController
, объявите его какSpring
один изBean
,DispatcherServlet
Будет автоматически сканировать классы, аннотированные этой аннотацией, и сопоставлять запросы с аннотациями.@RequestMapping
Особо отмеченный здесь метод объявляется в обычномBean
когда используешь@Component
,@Service
,@Repository
а также@Controller
эквивалентны, потому что@Controller
,@Service
,@Repository
все вместе@Component
мета-аннотации, но вSpring
MVC
объявить контроллерBean
, вы можете использовать только@Controller
.
2. @RequestMapping
@RequestMapping
Аннотации используются для отображенияWeb
Запросы (пути доступа и параметры), классы обработки и методы.@RequestMapping
Может быть аннотирован в классе или методе. аннотация к методу@RequestMapping
Путь наследует путь, аннотированный в классе,@RequestMapping
служба поддержкиServlet
изrequest
а такжеresponse
в качестве аргумента также поддерживаетrequest
а такжеresponse
для настройки типа носителя.
3.@ResponseBody
@ResponseBody
Поддерживает размещение возвращаемого значения вresponse
body вместо возврата страницы. Мы основаны на многихAjax
Program, вы можете использовать эту аннотацию для возврата данных вместо страниц; эту аннотацию можно разместить перед возвращаемым значением или в методе.
4. @RequestBody
@RequestBod
разрешатьrequest
Параметры находятся вrequest
По адресу, а не по чистой прямой ссылке. Эта аннотация помещается перед параметром.
5. @PathVariable
@PathVariable
Используется для получения параметров пути, таких как/news/001
, может получить001
В качестве параметра эта аннотация помещается перед параметром.
6.@RestController
@RestController
представляет собой комбинированную аннотацию, которая объединяет@Controller
а также@ResponseBody
, что означает, что вам нужно использовать эту аннотацию, когда вы разрабатываете элемент управления, взаимодействующий только с данными на странице. Без этой аннотации, чтобы добиться вышеперечисленных функций, вам нужно добавить ее в код самостоятельно.@Controller
а также@ResponseBody
Две аннотации.
2. Примеры
1. Классы передачи по значению
Добавить кjackson
и связанные зависимости, получение объектов иjson
а такжеxml
преобразование между
<!--对json和xml格式的支持 -->
<dependency>
<groupId>com.fasterxml.jackson.dataformat</groupId>
<artifactId>jackson-dataformat-xml</artifactId>
<version>2.5.3</version>
</dependency>
Здесь специально указано, что в реальных проектах мы фактически в основном поддерживаемjson
данные, нет необходимости поддерживать обаjson
а такжеxml
,потому чтоjson
Сравниватьxml
Более лаконично. из-заJavaScript
широкое использованиеjson
Чтобы быть наиболее рекомендуемым форматом, в этом случае наши зависимости следующие (приведенные выше зависимости содержат следующие зависимости):
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.5.3</version>
</dependency>
Этот класс используется для демонстрации приобретенияrequest
параметр объекта и возвращает этот объект вresponse
:
package org.light4j.springMvc4.domain;
public class DemoObj {
private Long id;
private String name;
public DemoObj() { //①
super();
}
public DemoObj(Long id, String name) {
super();
this.id = id;
this.name = name;
}
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
Объяснение кода:
①
jackson
объект иjson
Эта пустая конструкция должна использоваться при выполнении преобразований.
2. Аннотируйте демонстрационный контроллер
package org.light4j.springMvc4.web;
import javax.servlet.http.HttpServletRequest;
import org.light4j.springMvc4.domain.DemoObj;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
@Controller // ①
@RequestMapping("/anno") //②
public class DemoAnnoController {
@RequestMapping(produces = "text/plain;charset=UTF-8") // ③
public @ResponseBody String index(HttpServletRequest request) { // ④
return "url:" + request.getRequestURL() + " can access";
}
@RequestMapping(value = "/pathvar/{str}", produces = "text/plain;charset=UTF-8")// ⑤
public @ResponseBody String demoPathVar(@PathVariable String str, //③
HttpServletRequest request) {
return "url:" + request.getRequestURL() + " can access,str: " + str;
}
@RequestMapping(value = "/requestParam", produces = "text/plain;charset=UTF-8") //⑥
public @ResponseBody String passRequestParam(Long id,
HttpServletRequest request) {
return "url:" + request.getRequestURL() + " can access,id: " + id;
}
@RequestMapping(value = "/obj", produces = "application/json;charset=UTF-8")//⑦
@ResponseBody // ⑧
public String passObj(DemoObj obj, HttpServletRequest request) {
return "url:" + request.getRequestURL()
+ " can access, obj id: " + obj.getId()+" obj name:" + obj.getName();
}
@RequestMapping(value = { "/name1", "/name2" }, produces = "text/plain;charset=UTF-8")//⑨
public @ResponseBody String remove(HttpServletRequest request) {
return "url:" + request.getRequestURL() + " can access";
}
}
Объяснение кода:
①
@Controller
Аннотация объявляет, что этот класс является контроллером
②@RequestMapping("/anno")
Путь доступа для сопоставления этого класса:/anno
.
③ Этот метод не помечает путь, поэтому используется путь на уровне класса./anno
;produces
настраиваемый возвратresponse
тип носителя и кодировка, или возвращаемое значениеjson
объект, наборporduces="application/json;charset=UTF-8"
, эта функция будет продемонстрирована позже.
④ Демонстрация приемлемаHttpServletRequest
Как параметр конечно тоже приемлемоHttpServletResponse
как параметр. здесь@ResponseBody
используется перед возвращаемым значением.
⑤ Демонстрация принимает параметры пути и объединяет их перед параметрами метода.@PathVariable
использовать, путь доступа/anno/pathvar/xxx
.
⑥ Демонстрация обычногоrequest
Сбор параметров, путь доступа/anno/requestParam?id=1
.
⑦ продемонстрировать параметр интерпретации объекту, а путь доступа/anno/obj?id=1&name=xx
.
⑧@ResponseBody
Может также использоваться в методах.
⑨ Продемонстрируйте сопоставление разных путей с одним и тем же методом, путь доступа/anno/name1
или/anno/name2
.
3. Демонстрация @RestController
package org.light4j.springMvc4.web;
import org.light4j.springMvc4.domain.DemoObj;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController // ①
@RequestMapping("/rest")
public class DemoRestController {
@RequestMapping(value = "/getjson",produces={"application/json;charset=UTF-8"}) // ②
public DemoObj getjson (DemoObj obj){
return new DemoObj(obj.getId()+1, obj.getName()+"yy");//③
}
@RequestMapping(value = "/getxml", produces={"application/xml;charset=UTF-8"})//④
public DemoObj getxml(DemoObj obj){
return new DemoObj(obj.getId()+1, obj.getName()+"yy");
}
}
Объяснение кода:
① использовать
@RestController
, объявлен контроллером и не требуется при возврате данных@ResponseBody
.
② Тип носителя возвращаемых данных:json
.
③ Верните объект напрямую, объект будет автоматически преобразован вjson
.
④ Тип носителя возвращаемых данных:xml
.
⑤ Верните объект напрямую, и объект будет автоматически преобразован вxml
.
Результат возврата json показан на следующем рисунке:
Возвращенный результат операции xml показан на следующем рисунке:
3. Пример исходного кода:
награда Добро пожаловать в публичный аккаунт Life Designer в WeChat.
github
адрес:Нажмите, чтобы просмотреть
Адрес облака кода:Нажмите, чтобы просмотреть
Общественный ID: Longjiazuoa