Örnek

Rest Api Excepition Yakalayan Bir Örnek

Jax-RS exception'ları genel olarak yakalamanızı ve özelleştirmenizi sağlamaktadır. Aşağıdaki gibi bir sınıfın eklenmesi yeterlidir:
import java.io.PrintWriter;
import java.io.StringWriter;

import javax.ws.rs.WebApplicationException;
import javax.ws.rs.core.MediaType;
import javax.ws.rs.core.Response;
import javax.ws.rs.ext.ExceptionMapper;
import javax.ws.rs.ext.Provider;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import com.mercury.rest.api.ApiResponse;
import com.mercury.rest.api.Error;

@Provider
public class GenericExceptionMapper implements ExceptionMapper<Throwable>{
	
	private static Logger logger=LoggerFactory.getLogger(GenericExceptionMapper.class);

	@Override
	public Response toResponse(Throwable e) {
		
		logger.error(e.getLocalizedMessage(),e);
		
		ApiResponse apiResponse=new ApiResponse();
		
		setHttpStatus(e, apiResponse);
		apiResponse.setErrorCode("GENERIC_ERROR");
		
		apiResponse.setErrorDesc(e.getMessage());
		
		StringWriter errorStackTrace = new StringWriter();
		e.printStackTrace(new PrintWriter(errorStackTrace));
		apiResponse.setErrorDetails(errorStackTrace.toString());
		
		apiResponse.setErrorMessage("Bir hata olustu");
		
		return Response.status(apiResponse.getStatus())
				.entity(apiResponse)
				.type(MediaType.APPLICATION_JSON)
				.build();	
	}
	
	private void setHttpStatus(Throwable ex, ApiResponse errorMessage) {
		if(ex instanceof WebApplicationException ) {
			errorMessage.setStatus(((WebApplicationException)ex).getResponse().getStatus());
		} else {
			errorMessage.setStatus(Response.Status.INTERNAL_SERVER_ERROR.getStatusCode());
		}
	}

}
ExceptionMapper sınıfını implement ederek tüm Throwable'dan türeyen exception'ların işleneceği bildirilmiştir. Bir hata oluştuğunda Response toResponse(Throwable e) yöntemi çağrılacaktır. Bu yöntemde exception'dan bir cevap üretilip verilmesi gerekir. ApiResponse sınıfını ekleyelim :
public class ApiResponse {

	private int status;
	private String errorCode;
	private String errorDesc; // develoepr icin kisa aciklama
	private String errorMessage; //kullanici icin
	private String errorDetails; // developer icin detail

	public int getStatus() {
		return status;
	}
	public void setStatus(int status) {
		this.status = status;
	}
	public String getErrorCode() {
		return errorCode;
	}
	public void setErrorCode(String errorCode) {
		this.errorCode = errorCode;
	}
	public String getErrorDesc() {
		return errorDesc;
	}
	public void setErrorDesc(String errorDesc) {
		this.errorDesc = errorDesc;
	}
	public String getErrorMessage() {
		return errorMessage;
	}
	public void setErrorMessage(String errorMessage) {
		this.errorMessage = errorMessage;
	}
	public String getErrorDetails() {
		return errorDetails;
	}
	public void setErrorDetails(String errorDetails) {
		this.errorDetails = errorDetails;
	}
	
}
Bu sınıf cevaplar için kullanılan bir sınıftır. Response.status(apiResponse.getStatus()) .entity(apiResponse) .type(MediaType.APPLICATION_JSON) .build(); ile apiResponse cevap olarak dönülmektedir.
zafer.teker , 23.06.2017

Bu Sayfayı Paylaş:

Fibiler Üyelerinin Yorumları


Tüm üyeler içeriklere yorum ekleyerek katkıda bulunabilir : Yorum Gir

Misafir Yorumları




Bu Sayfayı Paylaş:

İletişim Bilgileri

Takip Et

Her Hakkı Saklıdır. Bu sitede yayınlanan tüm bilgi ve fikirlerin kullanımından fibiler.com sorumlu değildir. Bu sitede üretilmiş , derlenmiş içerikleri, fibiler.com'u kaynak göstermek koşuluyla kendi sitenizde kullanılabilirsiniz. Ancak telif hakkı olan içeriklerin hakları sahiplerine aittir