SpringMvc4.x Foundation (2): Общие аннотации Spring MVC

задняя часть WeChat Spring MVC

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Поддерживает размещение возвращаемого значения вresponsebody вместо возврата страницы. Мы основаны на многихAjaxProgram, вы можете использовать эту аннотацию для возврата данных вместо страниц; эту аннотацию можно разместить перед возвращаемым значением или в методе.

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. Пример исходного кода:

githubадрес:Нажмите, чтобы просмотреть
Адрес облака кода:Нажмите, чтобы просмотреть

награда Добро пожаловать в публичный аккаунт Life Designer в WeChat.
Общественный ID: Longjiazuoa