Zoeken…


parameters

aantekening Kolom
@Controller Geeft aan dat een geannoteerde klasse een "Controller" (webcontroller) is.
@RequestMapping Annotatie voor het toewijzen van webverzoeken aan specifieke handlerklassen (als we deze met klasse hebben gebruikt) en / of handlermethoden (als we deze met methoden hebben gebruikt).
method = RequestMethod.GET Type HTTP-verzoekmethoden
responseBody Annotatie die een retourwaarde van een methode aangeeft, moet worden gebonden aan de webrespons
@RestController @Controller + ResponseBody
@ResponseEntity Uitbreiding van HttpEntity die een HttpStatus-statuscode toevoegt, we kunnen de retour-http-code beheren

Een REST-service maken

  1. Maak een project met STS (Spring Starter Project) of Spring Initializr (op https://start.spring.io ).
  2. Voeg een webafhankelijkheid toe aan uw pom.xml:
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
    </dependency>

of typ web in het zoekvak Search for dependencies , voeg webafhankelijkheid toe en download gezipte projecten.

  1. Maak een domeinklasse (gebruiker)
 public class User {
    
        private Long id;
    
        private String userName;
    
        private String password;
    
        private String email;
    
        private String firstName;
    
        private String lastName;
    
        public Long getId() {
            return id;
        }
    
        public void setId(Long id) {
            this.id = id;
        }
    
        public String getUserName() {
            return userName;
        }
    
        public void setUserName(String userName) {
            this.userName = userName;
        }
    
        public String getPassword() {
            return password;
        }
    
        public void setPassword(String password) {
            this.password = password;
        }
    
        public String getEmail() {
            return email;
        }
    
        public void setEmail(String email) {
            this.email = email;
        }
    
        public String getFirstName() {
            return firstName;
        }
    
        public void setFirstName(String firstName) {
            this.firstName = firstName;
        }
    
        public String getLastName() {
            return lastName;
        }
    
        public void setLastName(String lastName) {
            this.lastName = lastName;
        }
    
        @Override
        public String toString() {
            return "User [id=" + id + ", userName=" + userName + ", password=" + password + ", email=" + email
                    + ", firstName=" + firstName + ", lastName=" + lastName + "]";
        }
    
        public User(Long id, String userName, String password, String email, String firstName, String lastName) {
            super();
            this.id = id;
            this.userName = userName;
            this.password = password;
            this.email = email;
            this.firstName = firstName;
            this.lastName = lastName;
        }
    
        public User() {}
    }
  1. Maak de klasse UserController en voeg annotaties bij @Controller , @RequestMapping
    @Controller
    @RequestMapping(value = "api")
    public class UserController {
    }
  1. Definieer de statische lijst met gebruikersvariabele om de database te simuleren en voeg 2 gebruikers toe aan de lijst
    private static List<User> users = new ArrayList<User>();

    public UserController() {
        User u1 = new User(1L, "shijazi", "password", "[email protected]", "Safwan", "Hijazi");
        User u2 = new User(2L, "test", "password", "[email protected]", "test", "test");
        users.add(u1);
        users.add(u2);
    }
  1. Maak een nieuwe methode om alle gebruikers in de statische lijst te retourneren (getAllUsers)
    @RequestMapping(value = "users", method = RequestMethod.GET)
    public @ResponseBody List<User> getAllUsers() {
         return users;
    }
  1. Voer de applicatie uit [door mvn clean install spring-boot:run ] en noem deze URL http://localhost:8080/api/users

  2. We kunnen de klasse annoteren met @RestController , en in dit geval kunnen we de ResponseBody van alle methoden in deze klasse verwijderen (@RestController = @Controller + ResponseBody) , nog een punt kunnen we de retour-http-code beheren als we ResponseEntity , we zullen dezelfde eerdere functies implementeren, maar met behulp van @RestController en ResponseEntity

@RestController
@RequestMapping(value = "api2")
public class UserController2 {

    private static List<User> users = new ArrayList<User>();

    public UserController2() {
        User u1 = new User(1L, "shijazi", "password", "[email protected]", "Safwan", "Hijazi");
        User u2 = new User(2L, "test", "password", "[email protected]", "test", "test");
        users.add(u1);
        users.add(u2);
    }
    
    @RequestMapping(value = "users", method = RequestMethod.GET)
    public ResponseEntity<?> getAllUsers() {
       try {
           return new ResponseEntity<>(users, HttpStatus.OK);
       } catch (Exception e) {
           return new ResponseEntity<>(HttpStatus.INTERNAL_SERVER_ERROR);
       }
    }
}

probeer nu de toepassing uit te voeren en noem deze URL http: // localhost: 8080 / api2 / gebruikers

Een rustservice maken met JERSEY en Spring Boot

Jersey is een van de vele frameworks die beschikbaar zijn om Rest Services te maken. In dit voorbeeld ziet u hoe u Rest Services kunt maken met Jersey en Spring Boot

1.Projectinstellingen

U kunt een nieuw project maken met STS of met behulp van de Spring Initializr- pagina. Neem tijdens het maken van een project de volgende afhankelijkheden mee:

  1. Jersey (JAX-RS)
  2. Web

2. Een controller maken

Laten we een controller maken voor onze Jersey Web Service

@Path("/Welcome")
@Component
public class MyController {
    @GET
    public String welcomeUser(@QueryParam("user") String user){
        return "Welcome "+user;
    }    
}

@Path("/Welcome") geeft aan het framework aan dat deze controller moet reageren op het URI-pad / Welcome

@QueryParam("user") geeft aan het framework aan dat we één query-parameter verwachten met de naam user

3. bedrading Jersey configuraties

Laten we nu Jersey Framework met Spring Boot configureren: maak een klasse, in plaats een org.glassfish.jersey.server.ResourceConfig die org.glassfish.jersey.server.ResourceConfig :

@Component
@ApplicationPath("/MyRestService")
public class JerseyConfig extends ResourceConfig {
    /**
     * Register all the Controller classes in this method 
     * to be available for jersey framework
     */
    public JerseyConfig() {
        register(MyController.class);
    }

}

@ApplicationPath("/MyRestService") geeft aan het framework aan dat alleen verzoeken die zijn gericht aan het pad /MyRestService zijn bedoeld om te worden afgehandeld door het jersey-framework, andere verzoeken moeten nog steeds worden behandeld door spring-framework.

Het is een goed idee om de configuratieklasse te annoteren met @ApplicationPath , anders worden alle aanvragen afgehandeld door Jersey en kunnen we deze niet omzeilen en een veercontroller deze laten verwerken indien nodig.

4.done

Start de applicatie en start een voorbeeld-URL zoals (ervan uitgaande dat u spring boot hebt geconfigureerd om te worden uitgevoerd op poort 8080):

http://localhost:8080/MyRestService/Welcome?user=User

U zou een bericht in uw browser moeten zien zoals:

Welkom gebruiker

En u bent klaar met uw Jersey Web Service met Spring Boot

Een REST API gebruiken met RestTemplate (GET)

Om een REST API met consumeren RestTemplate , maak een Spring boot project met de lente boot initialzr en zorg ervoor dat de Web afhankelijkheid wordt toegevoegd:

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-web</artifactId>
</dependency>

Nadat u uw project hebt opgezet, maakt u een RestTemplate boon. U kunt dit doen binnen de hoofdklasse die al is gegenereerd, of binnen een afzonderlijke configuratieklasse (een klasse geannoteerd met @Configuration ):

@Bean
public RestTemplate restTemplate() {
    return new RestTemplate();
}

Maak daarna een domeinklasse, vergelijkbaar met wat u moet doen bij het maken van een REST-service .

public class User {
    private Long id;
    private String username;
    private String firstname;
    private String lastname;

    public Long getId() {
        return id;
    }

    public String getUsername() {
        return username;
    }

    public void setUsername(String username) {
        this.username = username;
    }

    public String getFirstname() {
        return firstname;
    }

    public void setFirstname(String firstname) {
        this.firstname = firstname;
    }

    public String getLastname() {
        return lastname;
    }

    public void setLastname(String lastname) {
        this.lastname = lastname;
    }
}

Voer in uw client de RestTemplate :

@Autowired
private RestTemplate restTemplate;

Om een REST API te gebruiken die een enkele gebruiker retourneert, kunt u nu gebruiken:

String url = "http://example.org/path/to/api";
User response = restTemplate.getForObject(url, User.class);

Als u een REST API gebruikt die een lijst of array van gebruikers retourneert, hebt u twee opties. Gebruik het als een array:

String url = "http://example.org/path/to/api";
User[] response = restTemplate.getForObject(url, User[].class);

Of consumeer het met de ParameterizedTypeReference :

String url = "http://example.org/path/to/api";
ResponseEntity<List<User>> response = restTemplate.exchange(url, HttpMethod.GET, null, new ParameterizedTypeReference<List<User>>() {});
List<User> data = response.getBody();

Houd er rekening mee dat wanneer u ParameterizedTypeReference , u de geavanceerdere methode RestTemplate.exchange() gebruiken en hiervan een subklasse moet maken. In het bovenstaande voorbeeld wordt een anonieme klasse gebruikt.



Modified text is an extract of the original Stack Overflow Documentation
Licentie onder CC BY-SA 3.0
Niet aangesloten bij Stack Overflow