Я считаю, что разработчики, которые использовали Spring, использовали аннотации @Requestbody и @Responsebody и могут напрямую анализировать ввод в JSON и вывод в JSON. Тем не менее, HTTP-запросы и ответы основаны на текстовых условиях, что означает, что браузер и сервер общаются, обменивая оригинальный текст, и на самом деле это играет роль.
Httpmessageconverter
Пакет ответов HTTP -запроса на самом деле является строкой. Когда сообщение запроса будет введено в программу Java, оно будет инкапсулировано в поток ServletInputStream. Разработчик будет читать сообщение, а пакет ответов выведет пакет ответов через потоковую передачу ServletOutputStream.
Только исходный струнный пакет можно считать из потока, и то же самое верно для выходного потока. Затем, когда сообщение прибывает в Springmvc/Springboot и выходит из Springmvc/Springboot, существует проблема преобразования струн в объекты Java. Этот процесс в Springmvc/Springboot решается через httpmessageconverter. Httpmessageconverter interface исходный код:
публичный интерфейс httpmessageconverter <t> {boolean canread (class <?> clazz, mediaType mediaType); Boolean CanWrite (Class <?> Clazz, MediaType MediaType); Список <MediaType> getSupportedMediatypes (); T Read (Class <? Extends T> clazz, httpinputmessage inputmessage) бросает ioexception, httpmessagenotreadableexception; void write (t t, mediaType contentType, httpoutputmessage outputmessage) бросает ioexception, httpmessagenotwritexception;}Вот пример иллюстрации,
@Requestmapping ("/test")@responsbodypublic String Test (@Requestbody String Param) {return "Param '" + param + "'";}Перед тем, как запрос вступит в метод испытания, соответствующий класс реализации HTTPMessageConverter будет выбран в соответствии с аннотацией @Requestbody, чтобы разобрать параметры запроса в парамельную переменную. Поскольку параметры здесь из строки, здесь используется класс StringhttpmessageConverter. Его метод canread () возвращает true, а затем метод read () будет считывать параметры запроса из запроса и связываться с парамельной переменной метода test ().
Аналогичным образом, когда метод испытаний выполняется, поскольку возвратное значение идентифицирует @ResponseBody, SpringMVC/Springboot будет использовать метод write () stringhttpmessageConverter и написать результат в качестве строкового значения в ответном сообщении. Конечно, метод CanWrite () возвращается в настоящее время.
Заимствуйте следующую цифру, чтобы кратко описать весь процесс:
Во время весенней обработки сообщение запроса и ответное сообщение абстрагируются в сообщение о запросе httpinputmessage и ответное сообщение httpoutputmessage, соответственно.
При обработке запроса соответствующий преобразователь сообщений связывает сообщение запроса в формальный объект параметра в методе. Здесь может быть несколько разных форм сообщения в одном и том же объекте, таких как JSON и XML. То же самое верно для ответа на запросы.
Весной для различных форм сообщений существуют различные классы реализации HTTPMessageConverter для обработки различных форм сообщений. Что касается различных реализаций различных анализов сообщений, они находятся в разных классах реализации HTTPMessageConverter.
Заменить @responcebody's default httpmessageconverter
Вот пример Springboot. В Springmvc/Springboot аннотация @requestbody использует Джексона для разбора JSON по умолчанию. См. Следующий пример:
@Controller @requestmapping ("/user") открытый класс usercontroller {@requestmapping ("/testt") @responsebody public user testt () {user user = новый пользователь ("name", 18); вернуть пользователь; }} Пользователь открытого класса {private String username; частный целый возраст; частный целый телефон; Приватная строковая электронная почта; Public User (String UserName, Integer Age) {super (); this.username = имя пользователя; this.age = возраст; }}Доступ к браузеру /пользователь /testt возвращается следующим образом:
Это результат использования диапазона Джексона. Теперь мы изменим его на использование объекта анализа FastJson. Здесь мы заменяем httpmessageconverter по умолчанию, что означает использование FastjsonhttpmessageConverter для обработки преобразования между объектами Java и httpinputmessage/httpoutputmessage.
Во -первых, создайте новый класс конфигурации, чтобы добавить конфигурацию FastjsonhttpmessageConverter. Spring 4.x рекомендует использовать метод аннотации конфигурации Java, то есть нет XML -файла, а Springboot еще больше.
Импорт com.alibaba.fastjson.serializer.serializerfeature; import com.alibaba.fastjson.support.config.fastjsonconfig; import com.alibaba.fastjson.support.spring.fastjsonhttpmessageNverter; import.support.spring.fastjsonhtpmessageConverter; org.springframework.boot.autoconfigure.web.httpmessageconverters; import org.springframework.context.annotation.bean; import org.springframework.context.annotation.configuration; импорт org.spramework.http.converter.HtttMess; java.nio.charset.charset; @ConfigurationPublic Class httpmessageConverterConfig {// Внедрить FastJson, чтобы Parse Json, не используйте Jackson // Pastjson Jar Packag fastjsonhttpmessageconverters () {// 1. Определите объект, который преобразует сообщение FastjsonhttpmessageConverter fastConverter = new FastJsonHttpmessageConverter (); // 2. Добавить информацию о конфигурации FASTJSON FASTJSONCONFIG FASTJSONCONFIG = NEW FASTJSONCONFIG (); Serializerfeature [] serializerfeatures = new Serializerfeature [] {// Выходная ключ - двойная цитата // serializerfeature.quotefieldnames, // будь то полевое поле как нулевое, если оно является нулевым, поле отображается // serializerfeature.writemapnul Serializerfeature.writenullnumberaszero, // Если поле списка является нулевым, выход [], а не null serializerfeature.writenulllistristasempty, // Если поле типа символа является нулевым, вывод «», а не null serializerfeature.writeNullingSempty, // Если логистый полю - это nullalizer. Serializerfeature.writenullbooleanasfalse, // date converter serializerfeature.writedateedateformat, // Circular Serializerfeature.disableCircularReferEdEctect,}; fastjsonconfig.setserializerfeatures (serializerfeatures); fastjsonconfig.setcharset (charset.forname ("utf-8")); // 3. Добавить информацию о конфигурации в конверт FastConverter.setFastJsonConfig (fastJsonConfig); // 4. Добавить преобразование в преобразование httpmessageconverter <?> Converter = FastConverter; вернуть новые httpmessageconverters (конвертер); }}Здесь, если значение типа строки является нулевым, оно вернется "", если значение нулевого, оно вернется 0, перезапустите приложение, снова получите доступ к интерфейсу /пользователь /тест и вернется следующим образом:
Вы можете видеть, что NULL преобразуется в «» или 0 в настоящее время.
Выше всего содержание этой статьи. Я надеюсь, что это будет полезно для каждого обучения, и я надеюсь, что все будут поддерживать Wulin.com больше.