Se hai bisogno di scrivere web services REST su tecnologia Java/JEE, ti consiglio VIVAMENTE di utilizzare Spring.
Sostanzialmente, devi creare un controller mappando url e metodo http per i suoi singoli messaggi.
Il mio controller, tanto per dare un'idea della semplicità della cosa, è questo:
codice:
@Controller
public class MoviesCatalogRestController {
@Autowired
private MovieRepository movieRepository;
@RequestMapping(value="/movies", method=RequestMethod.GET)
@ResponseStatus(HttpStatus.OK)
public @ResponseBody List<Movie> getMovieList() {
List<Movie> sortedMovies = new ArrayList<Movie>(movieRepository.findAll());
Collections.sort(sortedMovies, new Comparator<Movie>() {
@Override
public int compare(Movie o1, Movie o2) {
return o1.getName().compareTo(o2.getName());
}
});
return sortedMovies;
}
@RequestMapping(value="/movies/{movieId}", method=RequestMethod.GET)
@ResponseStatus(HttpStatus.OK)
public @ResponseBody Movie getMovieDetails(@PathVariable("movieId") int movieId) {
return movieRepository.findById(movieId);
}
@RequestMapping(value="/movies", method=RequestMethod.POST)
@ResponseStatus(HttpStatus.CREATED)
public void saveMovie(@RequestBody Movie movie,
HttpServletRequest request,
HttpServletResponse response) {
movieRepository.saveMovie(movie);
response.setHeader("Location",
getLocationForChildResource(request, movie));
}
@RequestMapping(value="/movies/{movieId}", method=RequestMethod.DELETE)
@ResponseStatus(HttpStatus.NO_CONTENT)
public void deleteMovie(@RequestBody Movie movie) {
movieRepository.deleteMovie(movie.getId());
}
public void setMovieRepository(MovieRepository movieRepository) {
this.movieRepository = movieRepository;
}
private static String getLocationForChildResource(HttpServletRequest request, Object childIdentifier) {
StringBuffer url = request.getRequestURL();
UriTemplate template = new UriTemplate(url.append("/{childId}").toString());
return template.expand(childIdentifier).toASCIIString();
}
}
Spring utilizza il protocollo di comunicazione più adatto sulla base dell'header 'Accept' mandato dal client. Ad ogni modo, ti consiglio JSon.