@Controller: аннотация, добавленная в класс, заставляет каждый метод в классе возвращать страницу просмотра.
Но в реальной разработке мы обычно просто позволяем внутреннему методу возвращать запрошенные данные во внешний интерфейс, а не на новую страницу просмотра. Если вы используете аннотацию @Controller, вы должны объединить ее с @ResponseBody, чтобы этот метод не возвращал представление во внешний интерфейс, а только передавал запрошенные данные во внешний интерфейс.
Вы можете добавить аннотацию @ResponseBody к классу Controller или методу уровня Controller.
@Controller
public class HelloController {
@GetMapping(value="/hello")
@ResponseBody
public String сказать(){//Вернуть json данные
return "gril";
}
@GetMapping(value="/hello1")
public String Say1(){//Вернуться к просмотру
return "sys/index1";
}
Чтобы решить эту неприятную операцию, SpringBoot предоставляет аннотацию @RestController для решения этой проблемы следующим образом:
@RestController: создается в Spring 4.0 и более поздних версиях, используется для отправки данных json/xml на главную страницу вместо возврата на страницу просмотра. Он эквивалентен @Controller и @ResponseBody.
Аннотация @RestController, добавленная в класс, заставляет каждый метод в классе возвращать возвращаемые данные json/xml на главную страницу. Поэтому в реальной разработке мы обычно используем эту аннотацию.
@RequestMapping("информация о пути"): @RequestMapping используется для сопоставления запросов, то есть для указания того, какие URL-запросы может обрабатывать контроллер. Эту аннотацию можно использовать для классов или методов на уровне контроллера.
Параметры в @RequestMapping:
путь: указывает путь, который ничем не отличается от значения, за исключением того, что путь нельзя опустить, а значение можно опустить.
Аннотация @RequestMapping в классе контроллера. На данный момент аннотация класса относится к корневому каталогу веб-сайта, а аннотация метода — относительно пути к классу.
Примечание. @RequestMapping("/index") эквивалентно @RequestMapping(value = "/index").
@RestController
@RequestMapping("/user")
// @RequestMapping(value = "/user")
public class UserController {
@RequestMapping("/login")
public String login() {
return "success";
}
}
// В настоящее время фактический запрошенный путь:/user/login.
// существование сортировка@RequestMapping эквивалентно объявлению корневого пути. Когда существование делает запрос, оно объединяет пути на стороне класса.
method свойство проходить method свойствоуказать Запрос по типу: Да GET (проверить), POST (добавить), PUT (изменить), DELETE (удалить), потому что форма браузера не может быть отправлена DELETE и PUT Запросы необходимо обрабатывать, если они используются, поэтому мы обычно используем их при разработке. CET и POST Выполните запрошенную задачу указанным способом.
проходить @RequestMapping(value=“/login”,method=RequestMethod.GET) указать метод входа() Только процесспроходить GET запрос отправлен через
@RestController
@RequestMapping(path = "/user")
public class UserController {
// проходить method свойствоуказать запрос типа. В настоящее время для доступа может быть запрошено только использованиеGET, и использованиеPOST сообщит об ошибке.
@RequestMapping(path = "/login", method=RequestMethod.GET)
public String login() {
return "success";
}
}
проходить @RequestMapping(value=“/login”,method=RequestMethod.POST) указать метод входа() Только процесспроходить POST запрос отправлен через
@RestController
@RequestMapping(path = "/user")
public class UserController {
// проходить method свойствоуказать запрос типа. В настоящее время только использоватьPOST может запрашивать доступ, а GET сообщит об ошибке.
@RequestMapping(path = "/login", method=RequestMethod.POST)
public String login() {
return "success";
}
}
Поскольку метод метод() в классе аннотаций RequestMapping возвращает массив RequestMethod, вы можете одновременно указать несколько методов запроса для этого метода, например
@RestController
@RequestMapping(path = "/user")
public class UserController {
// Метод Воля одновременно получает методGETиPOSTзапрос отправлен через
@RequestMapping(path = "/login", method={RequestMethod.POST,RequestMethod.GET})
public String login() {
return "success";
}
}
Paramsсвойство @RequestMapping из params свойство,Свойство означает параметр запроса,То естьдадобавлениесуществовать URL При изключении пары параметр множественных запросов &отдельный,Например
http://localhost/SpringMVC/user/login?username=kolbe&password=123456
Тогда этот параметр запроса username=kolbe а также password=123456,@RequestMapping Может использоваться в params параметр ограничения запросов,Для достижения дальнейшей фильтрации запросов,Например:
@Controller
@RequestMapping(path = "/user")
public class UserController {
// Метод Воля получает /user/login Отправьте запрос на из, причем запрос на параметр должен быть username=kolbe&password=123456
@RequestMapping(path = "/login", params={"username=kolbe","password=123456"})
public String login() {
return "success";
}
}
В данном примере это означает UserController серединаиз login() Метод обрабатывает только /user/login Отправьте запрос и обязательно включите username=kolbe&password=123456 параметр isrequest, иначе браузер возвращает Воля HTTP 404 из Ошибка.
headers свойство: @RequestMapping из headers свойство представляет собой заголовок запроса.
Использовать свойство @RequestMapping серединаиз заголовков, которое может ограничить клиенту отправку запросов.
@Controller
@RequestMapping(path = "/user")
public class UserController {
// Указывает только получение localhost:8080 Отправьте запрос, остальные запросы обрабатываться не будут.
@RequestMapping(path = "/login", headers="Host=localhost:8080")
public String login() {
return "success";
}
}
с заполнителем из URL С заполнителем из URL да Spring 3.0 Добавлена функция, вы можете ввести @PathVariable Воля URL заполнитель серединаиз, привязанный к контроллеру из дескриптора Методыпараметрсередина,Заполнительuse{} прилагается.
@Controller
@RequestMapping(path = "/user")
public class UserController {
// Если имеется только один параметр, вы можете опустить аннотацию @PathVariable("id"), но имя параметра после да должно соответствовать имени заполнителя и{}серединаиз, в противном случае будет сообщено об ошибке, если его невозможно найти.
// когда Данный @PathVariable("id") из При наличии скобок серединаизпараметра имя должно соответствовать заполнителю и{}середина изназвание. В настоящее время вы можете по своему усмотрению определить другие имена, например: @PathVariable("id") Integer param
@RequestMapping(value="/{id}", method=RequestMethod.GET)
public String show(@PathVariable("id") Integer id) {
return "success";
}
}
в этом контроллере show() Методом Воля можно получить user/1、user/2、user/3 Ожидание запроса пути, запрос метода должен быть ПОЛУЧИТЕ, используйте @PathVariable реализовано для приложения REST Технические характеристики обеспечивают большое удобство.
используется для Воля Http Post Запрос картографирования к конкретному методу-обработчику из аннотации. В частности: да: @PostMapping даа как ярлык для комбинации комментариев @RequestMapping(method = RequestMethod.POST)。
Эта аннотация эквивалентна: @RequestMapping(value="/{id}", метод=RequestMethod.POST)
используется для Воля Http Get Запрос картографирования к конкретному методу-обработчику из аннотации. В частности: да: @GetMapping даа как ярлык для комбинации комментариев @RequestMapping(method = RequestMethod.GET)。
Эта аннотация эквивалентна: @RequestMapping(value="/{id}", метод=RequestMethod.GET)
Подобные комбинированные аннотации включают: @PutMapping, @DeleteMapping, @PatchMapping. Использовать отдельно method из PUT、Delete а также Patch
@Api :этотаннотацияда Swagger серединаизодинаннотация,специализированныйиспользуется длясуществовать Controller По классу для этого Controller Класс интерфейса генерирует описание документа, которое затем генерируется Swagger из Api Это будет обсуждаться в документации Controller Сделайте введение.
Информация о параметрах: tags: Генерировать api Документ будет основан на tags Классификация, прямо говоря, даэтот controller серединаиз Все интерфейсы Генерировать документацию по интерфейсу будет существовать tags этот list Далее теги; Если имеется несколько значений, несколько список, каждый list Отображаются все интерфейсы.
@Api(tags = «Список 1»)
@Api(tags = {"Список1","Список2"})
value : Его функция tags да то же самое, что и из, только да не может генерировать несколько список, можно создать только один.
// используется для Controller сорт
@Api(tags = «Интерфейс клиентского сервера связи»)
@ApiOperation : этоттакжеда Swagger серединаизодинаннотация,эффектсуществовать Controller В методе класса серединаиз, описывающем этот интерфейс, он будет существовать Swagger из Api зафиксировано в документе.
Информация о параметрах: value: Опишите этот метод, значение Можно опустить. notes : Используется для запроса контента.
// используется для Controller Класс серединаиз интерфейса
@ApiOperation(value = "Клиент загружает соответствующий скрипт", notes = «Скачать скрипт»)
эти двое Swagger Аннотации используются для Controller Что касается категорий, то здесь также есть @ApiModel()а также @ApiModelProperty() используется в классах сущностей, обратите внимание на различие
@Autowired : spring Может автоматически помочь вам bean Ссылка из объекта изнутри setter/getter Если вы опустите метод, он автоматически поможет вам установить/получить. Он поможет вам выполнить Bean Объект из автоматической сборки.
@Autowired этатаннотациядапринадлежит SpringBoot из
@Autowired Принцип автоматического создания и сборки: Добавлено по умолчанию IOC Контейнер серединаиз компонента, контейнер вызовет Конструктор Создать без параметров объект, существует, выполняет такие операции, как присвоение инициализации ценить, если есть только конструкция параметра, Spring Будет вызван параметризованный конструктор, и параметризованный конструктор будет автоматически внедрен.
@Autowired использоватьизместо:
ПРИМЕЧАНИЕ. Используйте @Autowrite Объявление объекта обычно объявляется как private
package com.sue.cache.service;
import org.springframework.stereotype.Service;
@Service
public class TestService1 {
public void test1() {
}
}
package com.sue.cache.service;
import org.springframework.stereotype.Service;
@Service
public class TestService2 {
//Автоматически собрать один Service Слой из объекта экземпляра
@Autowired
private TestService1 testService1;
public void test2() {
}
}
@Autowride изиспользоватьпринцип,ондасуществоватьвозвращатьсяданныеизкогдаиспользовать DI Техническая реализация из. ДАО Слой не используется @Autowited, потому что этот слой не требует классов сущностей
Уведомление:
@Autowired()
@Qualifier("baseDao")
private BaseDao baseDao;
byName : Будет поиск по всей Конфигурации. файлсерединаизbean, если он имеет такое же имя, изbean будет автоматически собран, в противном случае он будет отображаться аномально. (название класса) byType : Будет поиск по всей Конфигурации. Если файлсерединаизbean имеет тот же тип bean, он будет автоматически собран, в противном случае он будет отображаться аномально. (категория из категории)
@Autowired аннотацияизrequiredпараметрпо умолчаниюда true, что указывает на то, что автоматическая сборка включена. Иногда нам не нужна функция автоматической сборки, поэтому мы можем установить параметр равным. false。 required = true : Включить автоматическую сборку (по умолчанию). required = false : Отключить автоматическую сборку (нужно включать вручную)
существует IDEA середина @Autowired Сохранить существующее, подчеркнуто, но можно использовать нормально. Почему это?
потому что @Autowired да На основании конструктора правильным способом использования должен быть способ использования конструктора для объявления объекта класса. Только да @Autowired Правильное использование аннотациииз.
private final CategoryMapper categoryMapper;
public CategoryServiceImpl(CategoryMapper categoryMapper) {
this.categoryMapper = categoryMapper;
}
Но дасуществовать на самом деле разработку середина, мы все напрямую используем @Autowired, чтобы упростить разработку из-за сложности.
@Autowired
private CategoryMapper categoryMapper;
Так он сохранит существование напоминания из-под тильды, но на использование да не влияет.
@Resource :@Resource аннотацияи @Autowired аннотация одинаковая, обе для сборки Бин, но между ними есть небольшая разница. @Ресурс Сборка по имени по умолчанию Бин, который будет name свойствоизценить Приходитьоказатьсяиметь то же самое id из Bean Definition и вводить. если @Resource Не указан name собственности, будет осуществляться по имени этой Воли, чтобы быть инъекцияизсвойствоиз Bean сборка.
Давайте сначала определим Bean(проходитьаннотацияизопределение пути)
@Component(value = "renlei")
public class Person {
String name;
Integer age;
}
Затем мы определяем класс Хаус и цитируемый выше из Человек, заставивший контейнер автоматически подключиться к нему
использовать @Resource(name = “renlei”) середина name свойствоценитьсоответствовать @Component(value = “renlei”) серединаиз value ценить
@Component
public class House {
//@ResourceизnameсвойствоизценитьиPersonдобрыйиз@Componentизvalueценить Переписываться【Вседа renlei], чтобы его можно было собрать
@Resource(name = "renlei")
private Person p1;
//@ResourceизназваниесвойствоизценитьиPerson класс из@Componentизценить не соответствует, один дарелей, один даперсон, поэтому сборка не удалась
@Resource(name = "person")
private Person p1;
//@Reource Не указаноимяизценить, поэтому контейнер перенесет эту переменную p1 с именем в пул середина Bean, чтобы найти идентификатор renleiизbean и собрать его в переменную thisrenlei середина. Сборка прошла успешно
@Reource
private Person renlei;
// @Reource Не указаноимяизценить, поэтому контейнер возьмет эту переменную p1 isname и перейдет к пулу bean-компонентов середина, чтобы найти идентификатор как p1izbean и собрать его в этот переменная p1 середина. если не удается найти, то собираем по типу Они все даPerson, поэтому сборка прошла успешно.
// Уведомление:Приведено более подробное описание существования. После сопоставления режима по имени, согласно Метод byType будет соответствовать, и сообщение об ошибке будет сообщено только в случае сбоя.
@Reource
private Person p1;
}
@Resource этатаннотациядапринадлежит J2EE из。используется длясвойствоили или метод,в целомиспользуется длясвойствоначальство。
@Resource аннотацияиспользоватьизпроцесс:
Примечание: @Resource Первыйиспользовать byName Сделайте совпадение. Если совпадение не удалось, вы получите результат: использовать. byType Метод: если сопоставление не удалось, будет сообщено об ошибке. существующее фактическое развитие середина, мы обычно даем @Service、@Controller а также @Repository из value свойство,таксуществоватьпроектсерединаиспользоватьиз @Resource аннотация Вседаиспользоватьиз byType Метод сопоставления типов.
@Value("1")
Присвойте переменной цену.
@Value("Чжан Сан")
private String name;
// Вышеупомянутое использование аналогично
private String name = «Чжан Сан»;
@Value: когда проект запускается,используется длячитать Конфигурационный file назначает цену статическим файлам. читать SpringBoot изхозяин Конфигурационный файлсерединаизсвойствоценить。
использовать Способ: application.yml Конфигурационный файл
student:
Имя: Чжан Сан
age:20
room:java
существовать Получение уровня кодаэтотпеременнаяценить
@Value("${student.name}")
private String name;
// На данный момент имя равно Чжан Сан.
Если параметры конфигурации student.name существовать Конфигурационный файлсередина не определен и инъекция не удалась, выбрасывая аномальный IllegalArgumentException
java.lang.IllegalArgumentException:
Could not resolve placeholder 'server.error.path' in value "${server.error.path}"
@Value(“{…:{…}}”) Вложенныйиспользовать
@Value("${student.name:${studnet.age:/student.room}}")
private String info;
@Value(“#{1}”)
@Value("#{"Чжан Сан"}")
частный String name;
// На данный момент имя равно Чжан Сан.
инъекция bean student свойство name изценить
если student Не существуетсуществоватьилиегосвойство name Не существуетсуществовать,тогда бросьаномальный SpelEvaluationException
org.springframework.expression.spel.SpelEvaluationException:
EL1008E: Property or field 'student' cannot be found on object of type
'org.springframework.beans.factory.config.BeanExpressionContext'
- maybe not public or not valid?
@Value(“#{…}”)
@Value("#{student.name ?: 'Чжан Сан'}")
этот @Value аннотация Можетиспользоватьсуществоватьлюбой слой
@PathVariable: картографирование привязки URL-адреса из заполнителя.
С заполнителем из URL да Spring3.0 Добавлена функция, URL серединаиз {xxx} Заполнитель может использоваться @PathVariable(“xxx”) привязывать к действию Методы Входсередина。
@RequestMapping("/user/{id}")
public String testPathVariable(@PathVariable("id") String id){
System.out.println("из заполнителя на пути изценить="+id);
return "success";
}
когда URL Когда середина сохраняет существование только одно за другим, вы можете опустить это @PathVariable аннотация, в настоящее время имя, за которым следует параметр, должно соответствовать заполнителю и имени.
@RequestMapping("/user/{id}")
// Прежде чем его можно будет распознать, имя этого параметра должно соответствовать заполнителям даid и и.
public String testPathVariable(String id){
System.out.println("из заполнителя на пути изценить="+id);
return "success";
}
когдаGiven @PathVariable время аннотации,этотаннотациясерединаизценить должна совпадать с именем-заполнителем,В настоящее время имя изпараметра можно настроить.
@RequestMapping("/user/{id}")
// @PathVariable("id") Имя серединаизпараметра должно соответствовать заполнителю, а следующий изпараметр может быть задан произвольно.
public String testPathVariable(@PathVariable("id") String myId){
System.out.println("из заполнителя на пути изценить="+myId);
return "success";
}
при сохранении существует несколько заполнителей во времени,В настоящее время аннотацию @PathVariable нельзя пропустить.,И сделайте его соответствующим заполнителю серединаизпараметров.
@RequestMapping("/user/{id}/{name}")
public String testPathVariable(@PathVariable("id") String myId, @PathVariable("name") String myName,){
System.out.println("из заполнителя на пути изценить="+id);
return "success";
}
@RequestParam : этотаннотациядаиспользуется для Бэкэнд-получениеданныеиз。перениматьизпараметрда Приходитьс requestHeader середина,То есть заголовок запроса。в целомиспользуется для GET запрос, лайк POST、DELETE Также могут быть запрошены другие типы запросов. Например, распространенное из URL: http://localhost:8081/spring-boot-study/novel/findByAuthorAndType?author=Тан Цзя Сан Шао &type=Завершенный
@RequestMapping(value = "add",method = RequestMethod.GRT)
public void addPeople(@RequestParam(value = "name", required = fasle,default = «Явская академическая вечеринка») String name,@RequestParam(value = "age") Integer age){
.....
}
@RequestBody :этотаннотациятакжедаиспользуется для Бэкэнд-получениеданныеиз。перениматьизпараметрда Приходитьс requestBody середина,То есть тело запроса。в целомиспользуется дляперенимать POST、DELETE и т. д. тип запроса данных, GET Тип также может применяться. Обычно используется для борьбы с не- Content-Type: application/x-www-form-urlencoded Формат кодировки изданный, например: application/json, application/xml Другие виды изданные.
Тип приложения/jsonизданныеязык,использоватьаннотация @RequestBody Джан Воля body Все внутри json Данные передаются на серверную часть, которая затем анализирует их.
@RequestMapping(value = "add",method = RequestMethod.GRT)
public void addPeople(@RequestBody People people){
.....
}
бэкэнд существует в том же методе получения, @RequestBody и @RequestParam() можно использовать одновременно с @RequestBody Может быть не более одного, и Может быть несколько @RequestParam().
Spring из @ExceptionHandler можно использовать для единообразной обработки изаномальных вызовов метода, например:
@ExceptionHandler()
public String handleExeption2(Exception ex) {
System.out.println("бросатьаномальный Понятно:" + ex);
ex.printStackTrace();
String resultStr = "аномальный:по умолчанию"; return resultStr;
}
Например, приведенное выше метод handleExeption2(), добавьте в этот метод @ExceptionHandler аннотация, этот метод будет обрабатывать другие методы класса середина (были @RequestMapping аннотация)бросатьвнеизаномальный。
@ExceptionHandler Параметр может быть добавлен в середине аннотации, и параметр имеет какой-то аномальный класс. class,Представляет этот метод, который специально обрабатывает аномальный класс.,Например:
@ExceptionHandler(NumberFormatException.class)
public String handleExeption(Exception ex) {
System.out.println("бросатьаномальный Понятно:" + ex);
ex.printStackTrace();
String resultStr = "аномальный:NumberFormatException";
return resultStr;
}
на этот раз в аннотированном параметре NumberFormatException.class, указывающий, что выбрасывают только методы. NumberFormatException час,Этот метод будет вызван. если подкинуть другое изаномальноеиз времени,Этот метод не может получить этот аномальный.
При возникновении аномального события Spring выберет метод, наиболее близкий к выбросу аномального.
Например, как упоминалось ранее NumberFormatException, у этого аномального есть родительский класс RuntimeException,RuntimeException Также есть родительский класс Исключение, мы определяем аномальные методы обработки соответственно @ExceptionHandler соответственно использует эти три аномальных параметра в качестве параметра,Например:
@ExceptionHandler(NumberFormatException.class)
public String handleExeption(Exception ex) {
System.out.println("бросатьаномальный Понятно:" + ex);
ex.printStackTrace();
String resultStr = "аномальный:NumberFormatException";
return resultStr;
}
@ExceptionHandler()
public String handleExeption2(Exception ex) {
System.out.println("бросатьаномальный Понятно:" + ex);
ex.printStackTrace();
String resultStr = "аномальный:по умолчанию"; return resultStr;
}
@ExceptionHandler(RuntimeException.class)
public String handleExeption3(Exception ex) {
System.out.println("бросатьаномальный Понятно:" + ex);
ex.printStackTrace();
String resultStr = "аномальный:RuntimeException";
return resultStr;
}
Ну, когда код выдает NumberFormatException При вызове метода из параметра Волядааннотация NumberFormatException.class из метода, также известного как да обрабатывать Exception(), и когда код выдает IndexOutOfBoundsException При вызове метода из параметра Волядааннотация RuntimeException из метода, также известного как да handleExeption3()。
идентифицированный @ExceptionHandler В аннотированном методе определяется тип возвращаемого значения. @RequestMapping из метода объединения, см. @RequestMapping из Объяснение, например возврат по умолчанию Spring из ModelAndView Объект также можно вернуть Струна, в это время из String да ModelAndView из пути, и не даю строку.
В некоторых случаях мы предоставим идентифицированный @RequestMapping из метода add @ResponseBody,напримериспользовать Ajax в сценарии напрямую возвращайте строку, аномальный класс обработки также может это сделать, добавьте @ResponseBody После аннотации вы можете напрямую вернуть строку, например:
@ExceptionHandler(NumberFormatException.class)
@ResponseBody
public String handleExeption(Exception ex) {
System.out.println("бросатьаномальный Понятно:" + ex);
ex.printStackTrace();
String resultStr = "аномальный:NumberFormatException";
return resultStr;
}
такиздействовать Можетсуществовать После выполнения метода Вернуть строку напрямуюсам。
использовать @ExceptionHandler час Попробуй неиспользоватьтакой жеизаннотацияпараметр。
если мы определяем два метода обработки, которые обрабатывают один и тот же аномальныйиз:
@ExceptionHandler(NumberFormatException.class)
@ResponseBody
public String handleExeption(Exception ex) {
System.out.println("бросатьаномальный Понятно:" + ex);
ex.printStackTrace();
String resultStr = "аномальный:NumberFormatException";
return resultStr;
}
@ExceptionHandler(NumberFormatException.class)
@ResponseBody
public String handleExeption2(Exception ex) {
System.out.println("бросатьаномальный Понятно:" + ex);
ex.printStackTrace();
String resultStr = "аномальный:по умолчанию"; return resultStr;
}
Оба метода обрабатывают NumberFormatException, этот метод определения можно скомпилировать в формате, когда NumberFormatException Когда его действительно бросают, Spring Выдаст нам ошибку:
java.lang.IllegalStateException: Ambiguous @ExceptionHandler method mapped for [class java.lang.NumberFormatException]: {public java.lang.String TestController.handleExeption(java.lang.Exception), public java.lang.String TestController.handleExeption2(java.lang.Exception)}
at org.springframework.web.method.annotation.ExceptionHandlerMethodResolver.addExceptionMapping(ExceptionHandlerMethodResolver.java:102) ~[spring-web-5.0.5.RELEASE.jar:5.0.5.RELEASE]
at org.springframework.web.method.annotation.ExceptionHandlerMethodResolver.<init>(ExceptionHandlerMethodResolver.java:66) ~[spring-web-5.0.5.RELEASE.jar:5.0.5.RELEASE]
3.18 @ModelAttribute @ModelAttribute аннотация Обычно используетсясуществовать Controller На уровне метода это @ModelAttribute заявлениеизметодсуществовать Controller Слой будет выполняться перед выполнением каждого метода, поэтому для Controller Слой содержит несколько URL Когда из, будьте осторожны. существуют, развиваются середина, мы обычно это понимаем @ModelAttribute Объявленный метод извлекается отдельно.
### 1.15 @ControllerAdvice @ControllerAdvice да @Controller Аннотировано после улучшения, этоаннотировано Spring Внутри есть вещи, которые могут справиться с общей ситуацией. когдарансуществовать Spring Boot серединатакже Можетиспользовать,Но в Spring Boot середина полностью автоматизирована.,потому Чтода полностью автоматизировано, поэтому вы также можете настроить его самостоятельно, например настроить изаномальную страницу, аномальные информационные подсказки, аномальный вид. Нужно сотрудничать @ModelAttribute Вместеиспользовать。
@ControllerAdvice
public class MyAdviceException {
//MaxUploadSizeExceededException, этот дааномальный класс, здесь можно перечислить несколько аномальных
@ExceptionHandler(MaxUploadSizeExceededException.class)
public void myexcept(MaxUploadSizeExceededException e, HttpServletResponse response){
response.setContentType("text/html;charset=utf-8");
PrintWriter writer = null;
try {
writer = response.getWriter();
} catch (IOException ex) {
ex.printStackTrace();
}
Writer.write("Файл слишком велик, выберите еще раз");
writer.flush();
writer.close();
}
}
@ResponseStatus из Роль даза перемены HTTP Ответ с кодом состояния.
@CrossOrigin Примечание. Вызовите ресурс, который находится за пределами исходной точки. Например: когдатысуществовать веб-страницу середина, чтобы просмотреть свой банковский счет.,В настоящее время вы существуете еще одну страницу середина при доступе к этому банковскому счету из,В настоящее время этой странице запрещено отправлять запросы на банковский счет «когдаэтот». Это обеспечивает безопасность аккаунта.
Совместное использование ресурсов между источниками (CORS) реализовано большинством браузеров. W3C Спецификация, позволяющая гибко указывать, какие междоменные запросы разрешены, а не какие-то менее безопасные и мощные политики, такие как IFPAME или JSONP。
1.дать controller серединаизкто-тометод Конфигурация CORS
controller Методы CORS конфигурацию, вы можете @RequestMapping Метод обработчика аннотаций добавляет @CrossOrigin аннотация для включения CORS (по умолчанию @CrossOrigin позволятьсуществовать @RequestMapping В середине аннотации указываем собственный источник HTTP метод):
1. Междоменный запрос на отдельный метод Конфигурация
@RestController
@RequestMapping("/account") public class AccountController {
@CrossOrigin
@GetMapping("/{id}")
public Account retrieve(@PathVariable Long id) { // ...
}
@DeleteMapping("/{id}")
public void remove(@PathVariable Long id) { // ...
}
}
@CrossOrigin аннотациясерединаизпараметр
2. в целом controller давать возможность @CrossOrigin существоватьэтотпримерсередина,для retrieve()и Все методы обработки remove() дают Возможность Благодаря междоменной поддержке вы также можете увидеть, как использовать @CrossOrigin свойствосделанный на заказ CORS конфигурация.
@CrossOrigin(origins = "http://domain2.com", maxAge = 3600)
@RestController
@RequestMapping("/account") public class AccountController {
@GetMapping("/{id}") public Account retrieve(@PathVariable Long id) { // ...
}
@DeleteMapping("/{id}") public void remove(@PathVariable Long id) { // ...
}
}
3.такой жечасиспользовать controller Уровень метода CORS Конфигурация, весна Воля объединяет два комментария, свойство для создания слияния из CORS конфигурация.
@CrossOrigin(maxAge = 3600)
@RestController
@RequestMapping("/account") public class AccountController {
@CrossOrigin(origins = "http://domain2.com")
@GetMapping("/{id}")
public Account retrieve(@PathVariable Long id) {
// ...
}
@DeleteMapping("/{id}")
public void remove(@PathVariable Long id) {
// ...
}
}
@InitBinder : существующая фактическая операция середина часто встречается в форме серединаиз даты строка и Javabean серединаиз типа даты изсвойство автоматическое преобразование, и springMVC По умолчанию этот формат преобразования не поддерживается, поэтому необходимо выполнить настройку вручную, Пользовательский тип данных из привязки может реализовать эту функцию.
@InitBinder используется длясуществовать @Controller середина отмечена в методе, указывая, что когда бывший контроллер регистрирует редактор свойств или другой, только для случаев, когда из Controller эффективный.
@RequestMapping("test")
@Controller
public class TestController {
@InitBinder
public void InitBinder(WebDataBinder binder){
DateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
CustomDateEditor dateEditor = new CustomDateEditor(df, true);
binder.registerCustomEditor(Date.class,dateEditor);
}
@RequestMapping(value="/param",method=RequestMethod.GET)
@ResponseBody
public Map<String,Object> getFormatData(Date date) throws ParseException{
Map<String,Object> map = new HashMap<String, Object>();
map.put("name", "zhangsan");
map.put("age", 22);
map.put("date",date);
return map;
}
}