dropwizard Custom responses


Example

import javax.ws.rs.*;
import javax.ws.rs.core.Response;
import java.util.HashMap;
import java.util.Map;
import java.util.Objects;

@Path("/alphabet/{letter}")
public class AlphabetResource {

    private final Map<String, String> alphabet;
    
    public AlphabetResource() {
        this.alphabet = new HashMap<>();
        this.alphabet.put("A", "Apple");
    }
    
    @GET
    public Response get(@PathParam("letter") String letter) {
        if (alphabet.containsKey(letter)) {
            return Response.ok(alphabet.get(letter)).build();
        } else {
            return Response.status(Response.Status.NOT_FOUND).build();
        }
    }
    
    @PUT
    public Response put(@PathParam("letter") String letter, String value) {
        if (alphabet.containsKey(letter)) {
            return Response.status(Response.Status.CONFLICT).build();
        } else {
            alphabet.put(letter, value);
            return Response.noContent().build();
        }
    }
    
    @POST
    public Response post(@PathParam("letter") String letter, String value) {
        if (alphabet.containsKey(letter) && Objects.equals(alphabet.get(letter), value)) {
            return Response.notModified().build();
        } else {
            alphabet.put(letter, value);
            return Response.noContent().build();
        }
    }
}

These can be called with the following curl commands

curl -v -X GET http://localhost:8080/alphabet/A
curl -v -X PUT http://localhost:8080/alphabet/A -d "Avacado"
curl -v -X PUT http://localhost:8080/alphabet/B -d "Banana"
curl -v -X POST http://localhost:8080/alphabet/A -d "Apple"
curl -v -X POST http://localhost:8080/alphabet/A -d "Avacado"