Construir RESTful Service em Java usando JAX-RS e Jersey (Celsius para Fahrenheit e Fahrenheit para Celsius)
Publicados: 2020-03-25
Você tem uma das perguntas/perguntas abaixo?
- Escreva um serviço REST Java para converter Fahrenheit para Celsius e Celcius para Fahrenheit
- REST com Java (JAX-RS) usando Jersey
- Conversão do método Fahrenheit para Celsius em Java
- Ajuda com lição de casa com conversão de graus (CtoF, FtoC)
- API Java para serviços Web RESTful
- serviços web – Qual é a melhor API REST Java?
- API REST para Java?
- ctof e ftoc tutorial. Tutorial Java ctof e ftoc
- Crie serviços Web RESTful com tecnologia Java
- Estrutura de API da Web RESTful para Java
RESTful Service
: Representational State Transfer (REST) ganhou ampla aceitação em toda a Web como uma alternativa mais simples aos serviços Web baseados em SOAP e Web Services Description Language (WSDL).
REST define um conjunto de princípios de arquitetura pelos quais você pode projetar serviços da Web que se concentram nos recursos de um sistema, incluindo como os estados dos recursos são endereçados e transferidos por HTTP por uma ampla variedade de clientes escritos em diferentes linguagens. Se medido pelo número de serviços da Web que o utilizam, o REST emergiu apenas nos últimos anos como um modelo de design de serviço da Web predominante. Na verdade, o REST teve um impacto tão grande na Web que deslocou principalmente o design de interface baseado em SOAP e WSDL porque é um estilo consideravelmente mais simples de usar.
RESTful vs. Tutorial de SOAP.

JAX-RS:
Java API for RESTful Web Services (JAX-RS), é um conjunto de APIs para o serviço REST do desenvolvedor. O JAX-RS faz parte do Java EE6 e faz com que os desenvolvedores desenvolvam aplicativos Web REST com facilidade.
Camisa:
Jersey é a implementação de referência de código aberto, qualidade de produção, JAX-RS (JSR 311) para a construção de serviços Web RESTful. Mas, também é mais do que a Implementação de Referência. Jersey fornece uma API para que os desenvolvedores possam estender Jersey para atender às suas necessidades.
Vamos começar a construir uma RESTful API
simples com as etapas abaixo:
Passo 1
No Eclipse => Arquivo => Novo => Projeto Web Dinâmico. Nomeie como " CrunchifyRESTJerseyExample
".

Certifique-se de definir:
- Tempo de execução de destino: Apache Tomcat v9.0
- Versão do módulo web dinâmico: 4.0
Passo 2
Se você não web.xml
(descritor de implantação), siga estas etapas. OU
- Clique com o botão direito no projeto
- Selecione
Java EE Tools
- Clique em
Generate Deployment Descriptor Stub
Isso criará o arquivo web.xml
na /WebContent/WEB-INF/
.
Etapa 3
Agora converta Project para Maven Project
para que possamos adicionar os arquivos .jar necessários como dependências.
Degraus:
- Clique com o botão direito no projeto
- Clique em
Configure
- Selecione a opção
Convert to Maven Project
.


Basta clicar no Finish button
sem fazer nenhuma alteração.

Passo 4
Abra o arquivo pom.xml
e adicione as dependências abaixo.
- asm.jar
- jersey-bundle.jar
- json.jar
- jersey-server.jar

Aqui está meu arquivo pom.xml
.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 |
< project xmlns = "http://maven.apache.org/POM/4.0.0" xmlns : xsi = "http://www.w3.org/2001/XMLSchema-instance" xsi : schemaLocation = "http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd" > < modelVersion > 4.0.0 < / modelVersion > < groupId > CrunchifyRESTJerseyExample < / groupId > < artifactId > CrunchifyRESTJerseyExample < / artifactId > < version > 0.0.1 - SNAPSHOT < / version > < packaging > war < / packaging > < build > < sourceDirectory > src < / sourceDirectory > < plugins > < plugin > < artifactId > maven - compiler - plugin < / artifactId > < version > 3.7.0 < / version > < configuration > < source > 1.7 < / source > < target > 1.7 < / target > < / configuration > < / plugin > < / plugins > < / build > < dependencies > < dependency > < groupId > asm < / groupId > < artifactId > asm < / artifactId > < version > 3.3.1 < / version > < / dependency > < dependency > < groupId > com . sun . jersey < / groupId > < artifactId > jersey - bundle < / artifactId > < version > 1.19.4 < / version > < / dependency > < dependency > < groupId > org . json < / groupId > < artifactId > json < / artifactId > < version > 20170516 < / version > < / dependency > < dependency > < groupId > com . sun . jersey < / groupId > < artifactId > jersey - server < / artifactId > < version > 1.19.4 < / version > < / dependency > < dependency > < groupId > com . sun . jersey < / groupId > < artifactId > jersey - core < / artifactId > < version > 1.19.4 < / version > < / dependency > < / dependencies > < / project > |
Passo-5
Atualize seu arquivo web.xml com este. Aqui está minha cópia do arquivo web.xml
:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 |
<? xml version = "1.0" encoding = "UTF-8" ?> < web - app xmlns : xsi = "http://www.w3.org/2001/XMLSchema-instance" xmlns = "http://java.sun.com/xml/ns/javaee" xmlns : web = "http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" xsi : schemaLocation = "http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" version = "3.0" > < display - name > CrunchifyRESTJerseyExample < / display - name > < welcome - file - list > < welcome - file > index . html < / welcome - file > < welcome - file > index . htm < / welcome - file > < welcome - file > index . jsp < / welcome - file > < welcome - file > default . html < / welcome - file > < welcome - file > default . htm < / welcome - file > < welcome - file > default . jsp < / welcome - file > < / welcome - file - list > < servlet > < servlet - name > Jersey Web Application < / servlet - name > < servlet - class > com . sun . jersey . spi . container . servlet . ServletContainer < / servlet - class > < load - on - startup > 1 < / load - on - startup > < / servlet > < servlet - mapping > < servlet - name > Jersey Web Application < / servlet - name > < url - pattern > / crunchify /* < / url - pattern > < / servlet - mapping > < / web - app > |
Passo-6
- Vá para
Java Resources
- Clique em src
- Clique com o botão direito -> Novo -> Classe
- Pacote: com.crunchify.restjersey
- Nome: CtoFService
CtoFService.java
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 |
package com . crunchify . restjersey ; /** * @author Crunchify.com * * Description: This program converts unit from Centigrade to Fahrenheit. * Last updated: 12/28/2018 */ import javax . ws . rs . GET ; import javax . ws . rs . Path ; import javax . ws . rs . PathParam ; import javax . ws . rs . Produces ; @ Path ( "/ctofservice" ) public class CtoFService { @ GET @ Produces ( "application/xml" ) public String convertCtoF ( ) { Double fahrenheit ; Double celsius = 36.8 ; fahrenheit = ( ( celsius * 9 ) / 5 ) + 32 ; String result = "@Produces(\"application/xml\") Output: \n\nC to F Converter Output: \n\n" + fahrenheit ; return "<ctofservice>" + "<celsius>" + celsius + "</celsius>" + "<ctofoutput>" + result + "</ctofoutput>" + "</ctofservice>" ; } @ Path ( "{c}" ) @ GET @ Produces ( "application/xml" ) public String convertCtoFfromInput ( @ PathParam ( "c" ) Double c ) { Double fahrenheit ; Double celsius = c ; fahrenheit = ( ( celsius * 9 ) / 5 ) + 32 ; String result = "@Produces(\"application/xml\") Output: \n\nC to F Converter Output: \n\n" + fahrenheit ; return "<ctofservice>" + "<celsius>" + celsius + "</celsius>" + "<ctofoutput>" + result + "</ctofoutput>" + "</ctofservice>" ; } } |
Passo-7
Da mesma forma, crie FtoCService.java
FtoCService.java
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 |
package com . crunchify . restjersey ; /** * @author Crunchify, LLC * Description: This program converts unit from Fahrenheit to Centigrade. * */ import javax . ws . rs . GET ; import javax . ws . rs . Path ; import javax . ws . rs . PathParam ; import javax . ws . rs . Produces ; import javax . ws . rs . core . Response ; import org . json . JSONException ; import org . json . JSONObject ; @ Path ( "/ftocservice" ) public class FtoCService { @ GET @ Produces ( "application/json" ) public Response convertFtoC ( ) throws JSONException { JSONObject jsonObject = new JSONObject ( ) ; Double fahrenheit = 98.24 ; Double celsius ; celsius = ( fahrenheit - 32 ) * 5 / 9 ; jsonObject . put ( "F Value" , fahrenheit ) ; jsonObject . put ( "C Value" , celsius ) ; String result = "@Produces(\"application/json\") Output: \n\nF to C Converter Output: \n\n" + jsonObject ; return Response . status ( 200 ) . entity ( result ) . build ( ) ; } @ Path ( "{f}" ) @ GET @ Produces ( "application/json" ) public Response convertFtoCfromInput ( @ PathParam ( "f" ) float f ) throws JSONException { JSONObject jsonObject = new JSONObject ( ) ; float celsius ; celsius = ( f - 32 ) * 5 / 9 ; jsonObject . put ( "F Value" , f ) ; jsonObject . put ( "C Value" , celsius ) ; String result = "@Produces(\"application/json\") Output: \n\nF to C Converter Output: \n\n" + jsonObject ; return Response . status ( 200 ) . entity ( result ) . build ( ) ; } } |
Passo-8
Agora vamos limpar o espaço de trabalho do Eclipse e construir o projeto.

1 2 3 |
1. Project - > Clean 2. Project - > Right click - > Maven - > Update Project 3. Project - > Right click - > Run As . . - > Maven Build ( option 5 ) - > Add "clean install" - > Run |
- Para
point 3
acima, usethese screenshots
de tela: Maven Build, instalação limpa. - Você deve ver a mensagem de sucesso da compilação.
Passo-9
Implante o projeto CrunchifyRESTJerseyExample
no Tomcat. Aqui estão as etapas detalhadas sobre como configurar o Tomcat no Eclipse, caso ainda não o tenha feito.
- Vá para a guia Servidor
- Clique com o botão direito em Servidor
- Clique em
Add and Remove Projects
- Projeto de seleção do lado esquerdo e clique em
Add
- Clique em terminar

Passo-10
- Inicie o servidor Tomcat 9.0

Estrutura completa do projeto:

Aqui estão as dependências do caminho de construção Java:

Certifique-se de usar o JDK 1.8 para este projeto. Iniciando o Java 9 – Os módulos JAXB, JAX-WS, JAF, JTA, CORBA são removidos e você precisa adicionar esses módulos manualmente ao seu arquivo maven pom.xml.
Tudo pronto.
Agora vamos testar seu serviço Web RESTful.
Teste 1: serviço web de Celsius para Fahrenheit without
parâmetro
Link: http://localhost:8080/CrunchifyRESTJerseyExample/crunchify/ctofservice/

Teste 2: serviço web de Celsius para Fahrenheit with
parâmetro

Teste 3: serviço web de Fahrenheit para Celsius without
parâmetro

Teste 4: serviço web de Fahrenheit para Celsius with
parâmetro

Exemplos de clientes RESTFul:
- Como criar um cliente Java RESTful usando Apache HttpClient – Exemplo
- Como criar um cliente Java RESTful com Java.Net.URL – Exemplo
- Como criar um cliente Java RESTful com o Jersey Client – Exemplo
Outro deve ler:
- CrunchifyJSONtoHTML.js – Script de conversão de JSON para tabela HTML
- Como gerar fora da memória (OOM) em Java programaticamente
- Como executar várias instâncias do Tomcat em um servidor?
- Como ler o objeto JSON do arquivo em Java – Tutorial Crunchify
Está com problemas para executar o código?
Alguns passos de triagem:
Inicialmente eu usei a dependência jersey-core
. Mas também adicionou dependência jersey-server
para evitar o problema abaixo.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 |
SEVERE : Servlet [ Jersey Web Application ] in web application [ / CrunchifyRESTJerseyExample ] threw load ( ) exception java . lang . ClassNotFoundException : com . sun . jersey . spi . container . servlet . ServletContainer at org . apache . catalina . loader . WebappClassLoaderBase . loadClass ( WebappClassLoaderBase . java : 1328 ) at org . apache . catalina . loader . WebappClassLoaderBase . loadClass ( WebappClassLoaderBase . java : 1157 ) at org . apache . catalina . core . DefaultInstanceManager . loadClass ( DefaultInstanceManager . java : 542 ) at org . apache . catalina . core . DefaultInstanceManager . loadClassMaybePrivileged ( DefaultInstanceManager . java : 523 ) at org . apache . catalina . core . DefaultInstanceManager . newInstance ( DefaultInstanceManager . java : 150 ) at org . apache . catalina . core . StandardWrapper . loadServlet ( StandardWrapper . java : 1032 ) at org . apache . catalina . core . StandardWrapper . load ( StandardWrapper . java : 971 ) at org . apache . catalina . core . StandardContext . loadOnStartup ( StandardContext . java : 4829 ) at org . apache . catalina . core . StandardContext . startInternal ( StandardContext . java : 5143 ) at org . apache . catalina . util . LifecycleBase . start ( LifecycleBase . java : 183 ) at org . apache . catalina . core . ContainerBase $ StartChild . call ( ContainerBase . java : 1432 ) at org . apache . catalina . core . ContainerBase $ StartChild . call ( ContainerBase . java : 1422 ) at java . base / java . util . concurrent . FutureTask . run ( FutureTask . java : 264 ) at org . apache . tomcat . util . threads . InlineExecutorService . execute ( InlineExecutorService . java : 75 ) at java . base / java . util . concurrent . AbstractExecutorService . submit ( AbstractExecutorService . java : 140 ) at org . apache . catalina . core . ContainerBase . startInternal ( ContainerBase . java : 944 ) at org . apache . catalina . core . StandardHost . startInternal ( StandardHost . java : 831 ) at org . apache . catalina . util . LifecycleBase . start ( LifecycleBase . java : 183 ) at org . apache . catalina . core . ContainerBase $ StartChild . call ( ContainerBase . java : 1432 ) at org . apache . catalina . core . ContainerBase $ StartChild . call ( ContainerBase . java : 1422 ) at java . base / java . util . concurrent . FutureTask . run ( FutureTask . java : 264 ) at org . apache . tomcat . util . threads . InlineExecutorService . execute ( InlineExecutorService . java : 75 ) at java . base / java . util . concurrent . AbstractExecutorService . submit ( AbstractExecutorService . java : 140 ) at org . apache . catalina . core . ContainerBase . startInternal ( ContainerBase . java : 944 ) at org . apache . catalina . core . StandardEngine . startInternal ( StandardEngine . java : 261 ) at org . apache . catalina . util . LifecycleBase . start ( LifecycleBase . java : 183 ) at org . apache . catalina . core . StandardService . startInternal ( StandardService . java : 422 ) at org . apache . catalina . util . LifecycleBase . start ( LifecycleBase . java : 183 ) at org . apache . catalina . core . StandardServer . startInternal ( StandardServer . java : 801 ) at org . apache . catalina . util . LifecycleBase . start ( LifecycleBase . java : 183 ) at org . apache . catalina . startup . Catalina . start ( Catalina . java : 695 ) at java . base / jdk . internal . reflect . NativeMethodAccessorImpl . invoke0 ( Native Method ) at java . base / jdk . internal . reflect . NativeMethodAccessorImpl . invoke ( NativeMethodAccessorImpl . java : 62 ) at java . base / jdk . internal . reflect . DelegatingMethodAccessorImpl . invoke ( DelegatingMethodAccessorImpl . java : 43 ) at java . base / java . lang . reflect . Method . invoke ( Method . java : 566 ) at org . apache . catalina . startup . Bootstrap . start ( Bootstrap . java : 350 ) at org . apache . catalina . startup . Bootstrap . main ( Bootstrap . java : 492 ) |
Se você estiver recebendo o erro acima, tente adicionar abaixo a dependência do maven em seu arquivo pom.xml
1 2 3 4 5 |
< dependency > < groupId > org . glassfish . jersey . core < / groupId > < artifactId > jersey - server < / artifactId > < version > 2.27 < / version > < / dependency > |