Тип ответа не лучший возврат для клиентов и автоматической документации, такой как Swagger, потому что он не имеет слишком много информации. Я предпочитаю, в частности, возвращать сущность напрямую, как кричать:
@POST
@Produces(MediaType.APPLICATION_JSON)
@Consumes(MediaType.APPLICATION_JSON)
public UserDTO createUser(String content) throws CityNotFoundException
{
ReceivedCreateUser receivedUser = gson.fromJson(content, ReceivedCreateUser.class);
User createdUser = userFacade.createUser(receivedUser.name,
receivedUser.email,
receivedUser.password,
receivedUser.city,
receivedUser.gender,
receivedUser.dateOfBirth);
if(createdUser == null){
throw new WebApplicationException(Response.Status.NOT_FOUND);
}
return UserDTO.basic(createdUser);
}
Это вернет Status Code = 200
, но есть много способов изменить его на 201. Мой фаворит переопределяет javax.ws.rs.container.ContainerResponseFilter.filter(...)
, как показано ниже:
import static org.springframework.http.HttpMethod.POST;
import static org.springframework.http.HttpStatus.CREATED;
import static org.springframework.http.HttpStatus.OK;
import java.io.IOException;
import javax.ws.rs.container.ContainerRequestContext;
import javax.ws.rs.container.ContainerResponseContext;
import javax.ws.rs.container.ContainerResponseFilter;
import javax.ws.rs.ext.Provider;
@Provider
public class LocalContainerResponseFilter implements ContainerResponseFilter {
@Override
public void filter(ContainerRequestContext requestContext, ContainerResponseContext responseContext)
throws IOException {
if (POST.name().equals(requestContext.getMethod()) && OK.value() == responseContext.getStatus()) {
responseContext.setStatus(CREATED.value());
}
}
}
Это изменит поведение JAX-RS, возвращая 201 для всех POST, в порядке.
Ещё 2 подсказки:
вы можете изменить параметр (содержимое строки) на (содержимое ReceivedCreateUser); и
Вы можете поместить код "throw new WebApplicationException
" внутри userFacade.createUser(...)