Newer
Older
JerseyDemo / src / main / java / com / example / springtest / demo / resources / UsersRest.java
package com.example.springtest.demo.resources;

import com.example.springtest.demo.entities.User;
import com.example.springtest.demo.repositories.UserRepository;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.lang.Nullable;
import org.springframework.stereotype.Component;

import javax.ws.rs.*;
import javax.ws.rs.core.MediaType;
import java.util.*;

@Component
@Path("/users")
public class UsersRest {

//    private Map<String, User> users = new HashMap<>();

    @Autowired // This means to get the bean called userRepository
    // Which is auto-generated by Spring, we will use it to handle the data
    private UserRepository userRepository;
//    @GET
//    public String getUser(@QueryParam("uId") String uId, @QueryParam("name") String name, @QueryParam("password") String password) {
//        ObjectMapper objectMapper = new ObjectMapper();
//        String json = null;
//        try {
//            json = objectMapper.writeValueAsString(new User(uId, name, password));
//        } catch (JsonProcessingException e) {
//            e.printStackTrace();
//        }
//        return json;
//    }
    @GET
    @Produces(MediaType.APPLICATION_JSON) // 戻り値をJSONで返す.
//    public Collection<User> getUsers() {
    public Iterable<User> getUsers(@Nullable @QueryParam("name") String name) {
        if(name == null) {
//        return users.values();    // JSONが返る
            return userRepository.findAll();
        } else {
            List<User> users = new ArrayList<>();
            for(User user: userRepository.findAll()) {
                if (user.getName().equals(name)) {
                    users.add(user);
                }
            }
            return users;
        }
    }

// 競合?
//    @GET
//    @Produces(MediaType.APPLICATION_JSON) // 戻り値をJSONで返す.
//    public Collection<User> getUsersByName(@QueryParam("name") String name) {
//    public Iterable<User> getUsersByName(@QueryParam("name") String name) {
//        return users.values();    // JSONが返る
//        List<User> users = new ArrayList<>();
//        for(User user: userRepository.findAll()) {
//            if (user.getName() == name) {
//                users.add(user);
//            }
//        }
//        return users;
//    }

    @Path("/{uId}")
    @GET
    @Produces(MediaType.APPLICATION_JSON) // 戻り値をJSONで返す.
//    public User getUser(@PathParam("uId") String uId) {
    public Optional<User> getUser(@PathParam("uId") String uId) {
        Optional<User> user = userRepository.findById(uId);
//        User user = users.get(uId);
        if (user.isPresent()) {
            return user;    // JSONが返る
        } else { // uIdが無ければ
            throw new WebApplicationException(404);    // 404が返る
        }
    }

    @POST
    @Produces(MediaType.APPLICATION_JSON)
    public User createUser(@FormParam("name") String name, @FormParam("password") String password) {
        String uId = UUID.randomUUID().toString();
        User user = new User(uId, name, password);
//        users.put(uId, user);
        return userRepository.save(user);
    }

    @Path("/{uId}")
    @PUT
    @Produces(MediaType.APPLICATION_JSON)
    public User updateUser(@PathParam("uId") String uId, @Nullable @FormParam("name") String name, @Nullable @FormParam("password") String password) {
//        User user = users.get(uId);
        Optional<User> user = userRepository.findById(uId);
        if (user.isPresent()) {
            user.get().setName(name);
            user.get().setPassword(password);
            return userRepository.save(user.get());    // JSONが返る
        } else { // uIdが無ければ
            throw new WebApplicationException(404);    // 404が返る
        }
    }

    @Path("/{uId}")
    @DELETE
    @Produces(MediaType.APPLICATION_JSON)
    public User deleteUser(@PathParam("uId") String uId) {
        Optional<User> user = userRepository.findById(uId);
        if (user.isPresent()) {
            userRepository.deleteById(uId);
            return user.get();   // JSONが返る
        } else { // uIdが無ければ
            throw new WebApplicationException(410);    // 410が返る(GONE)
        }
    }
}