1. Introdução
Este artigo apresenta principalmente como usar os serviços de back -end da SpringMVC para oferecer suporte a vários tipos de valor de retorno (XML, JSON, HTML, Excel) por meio da configuração.
O código aqui usa o Springboot, Download Endereço: https://github.com/xiagn825/springboot-todolist/tree/springboot-contentnegotiation
2. Conceitos básicos
2.1 A diferença entre o tipo de conteúdo e as configurações aceitadas em httpheader
Aceitar: o formato de dados a ser devolvido ao cliente pela interface
Curl -Header 'Aceitar: Application/Json' http: // localhost: 8080/TODO
Tipo de conteúdo: o formato de dados enviado pelo cliente ao servidor
CURL -X PULL -Chefe 'Content -Type: Application/JSON' -D '{"Title": "Weekend Schedule", "Content": "Sleep"}' http: // localhost: 8080/TODO2.2 Duas maneiras de gerar saída no springmvc
1) Quando o servidor usa o método RESTful para fornecer apenas dados para o AJAX ou outras solicitações do servidor do cliente, @ResponseBody geralmente é usado para identificar sua devolução. No momento, a primavera usa httpmessageConverter para formatar o objeto retornado no formato necessário.
2) Quando você precisa fornecer uma camada de apresentação (como HTML), o SpringMVC usa o ViewResolver para processar seu retorno.
Às vezes, seu aplicativo precisa fornecer os dois
2.3 Determinação do formato de saída Springmvc
Muitas vezes, para suportar vários sistemas ou vários terminais, você precisa produzir os mesmos dados em diferentes manifestações.
O SpringMVC usa o ContentNegoTationstrategy para determinar qual formato de dados solicita o usuário a ser obtido.
ContentNegoTationstrategy usa três maneiras de identificar que tipo de dados o usuário deseja retornar
Por favor, veja a configuração abaixo
@OverridePublic void ConfigureContentNeGoTiation (ContentNegoTiationConfigurer Configure) {Configurer.FavorPathExtension (false) .Favorparameter (true) .parametername ("MediaType") .DefaultContentType (MediaType.Application_Json. MediaType.Application_XML) .MediType ("html", MediaType.text_html) .mediatype ("json", mediatype.application_json);}Adicione a configuração acima ao webmvcconfig do seu projeto, o que significa fechar a regra do sufixo de URL, abrindo a regra do parâmetro de solicitação e definindo o parâmetro de solicitação como 'MediaType'. O formato de retorno padrão é JSON e também suporta retornar XML e HTML.
Esses três componentes são a chave para retornar saídas em diferentes formatos
2.4 RequestMappings
2.4.1 RequestMappingHandlerMapping
O que costumamos usar na primavera é requestmapphandlermapping. De acordo com o RequestMappingInfo, refinamos as condições de correspondência. O processo geral de pesquisa é o seguinte:
Interface de implementação abstactandlermethodmapping
1. Use UrlPathhelper para encontrar o caminho correspondente à solicitação
2. Encontre o handlermethod correspondente ao caminho
2.1 Encontre condições correspondentes do URLMAP RequestMappingInfo
2.2 Se a condição de correspondência for encontrada no valor equivalente, adicione -o à condição de correspondência
2.3 Se nenhuma condição de correspondência for encontrada, use o requestMappingInfo de todos os métodos de manuseio para combinar
2.4 Classifique as correspondências, retire a correspondência de maior prioridade e verifique se é a única prioridade mais alta
2.5: encapsular as duas situações em que as condições são correspondentes e as condições não são correspondidas.
3. Encapsular HandLermethod para garantir que a instância do feijão seja armazenada no contentNegoTiationManager, que fornece uma comparação das condições de correspondência para o MinityPE, para que a estrutura possa corresponder ao método de processamento mais apropriado.
2.5 httpmessageConverter
2.5.1 Os conversores de mensagens padrão
Springmvc carregará os seguintes httpmessageConverters por padrão:
ByteArrayhttpMessAgEConverter Converte Bytes ArraysStringHttpMessAgeconverter Converte StringsResourceHttpMessAgeconverter Converte org.springframework.core.io.Resource Para qualquer tipo de octo, fluxo de otto. javax.xml.transform.sourceFormHttpMessAgeconverter Converte dados para/de um multivaluemap <string, string> .jaxb2rootElementHttpMessAgConverter Converte o Java Objects para/de XML (adicionado apenas JaxB2 está presente no ClassTATHPATHPATHPATHATHON2) Jackson 2 está presente no caminho de classe) MappingjacksonHttpMessageConverter Converte JSON (adicionado apenas se Jackson estiver presente no caminho de classe) AtomfeedHttpMessageConverter Converte o Atom Feeds (adicionado somente se o Roma estiver presente no rsSSSCHANNELHTTPMESSAGECONVERTERS CONVERTES STER RSSSSTING) RSSSCHANNELHTTTPMESGECONVERTERS CONVERTES ROMATEMPT)
Se retornarmos, for identificado pelo @ResponseBody, a estrutura usará httpmessageConverter para processar o valor de retorno. O XMLCoverter padrão não é particularmente útil e depende da anotação @XMLROOTELEMEMENT no objeto da entidade. Não é muito conveniente. Portanto, introduzimos a biblioteca de classes auxiliares e personalizamos o MessageConverter para que o objeto retornado possa ser processado diretamente no formato XML.
Biblioteca de importação Gradle
Grupo de compilação: 'org.springframework', nome: 'spring-oxm', versão: '4.3.9.Release'Compile Group:' com.thoughtworks.xstream ', nome:' xstream ', versão:' 1.4.10 '
Configuração
@OverridePublic void ConfigureMessaGeconverters (List <httpMessageConverter <? >> conversores) {converters.add (createxmlHttpMessageConverter ()); super.configuremessageconverters (conversores);} private httpmessageConverter <ject> createxmlhttpmessageConverter () {marshallinghttpmessageconverter xmlconverter = newshallinghttpmessageconverter (); XStreamMarshaller xStreamMarShaller = new XStreamMarShaller (); xmlconverter.setMarshaller (xStreamMarshaller); xmlconverter.setUnMarshaller (xStreamMarshaller); retornar xmlconverter;}2.6 Ver resolução
2.6.1 Página Renderização (Freemarker)
Quando você precisa retornar à página, você precisa desenhar a imagem por um ViewResolver adequado e aqui você usa o Freemarker como o mecanismo da página.
Biblioteca de importação Gradle
Compile ("Org.springframework.boot: Spring-Boot-Starter-Freemarker")Resumir
O acima é o conteúdo inteiro deste artigo. Espero que o conteúdo deste artigo tenha certo valor de referência para o estudo ou trabalho de todos. Se você tiver alguma dúvida, pode deixar uma mensagem para se comunicar. Obrigado pelo seu apoio ao wulin.com.