All Downloads are FREE. Search and download functionalities are using the official Maven repository.

net.n2oapp.framework.mvc.callback.json.JsonServletCallback Maven / Gradle / Ivy

package net.n2oapp.framework.mvc.callback.json;

import com.fasterxml.jackson.databind.ObjectMapper;
import net.n2oapp.context.StaticSpringContext;
import net.n2oapp.framework.api.JsonUtil;
import net.n2oapp.framework.api.exception.N2oException;
import net.n2oapp.framework.api.ui.ResponseMessage;
import net.n2oapp.framework.api.ui.ErrorMessageBuilder;
import net.n2oapp.framework.mvc.callback.ServletCallback;
import net.n2oapp.framework.mvc.exception.ControllerArgumentException;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;

import static net.n2oapp.context.StaticSpringContext.getBean;

/**
 * Абстрактный обработчик возврата json в сервлете
 */
public abstract class JsonServletCallback implements ServletCallback {
    protected ObjectMapper objectMapper;
    private ErrorMessageBuilder errorMessageBuilder;

    protected JsonServletCallback() {
        this.objectMapper = JsonUtil.getMapper();
        this.errorMessageBuilder = getBean(ErrorMessageBuilder.class);
    }

    public JsonServletCallback(ObjectMapper objectMapper, ErrorMessageBuilder errorMessageBuilder) {
        this.objectMapper = objectMapper;
        this.errorMessageBuilder = errorMessageBuilder;
    }

    @Override
    public void onService(HttpServletRequest req, HttpServletResponse res)
            throws ControllerArgumentException, IOException {
        getObjectMapper().writeValue(res.getWriter(), resolveSuccessModel(req, res));
    }


    @Override
    public void onError(N2oException e, HttpServletRequest req, HttpServletResponse res)
            throws IOException {
        if (!res.isCommitted()) {
            res.setStatus(e.getHttpStatus());
            getObjectMapper().writeValue(res.getWriter(), resolveFailModel(e, req, res));
        }
    }

    protected void setObjectMapper(ObjectMapper objectMapper) {
        this.objectMapper = objectMapper;
    }

    private ObjectMapper getObjectMapper() {
        return objectMapper;
    }



    @Override
    public String getContentType() {
        return "application/json";
    }

    protected ResponseMessage createResponseMsg(N2oException e) {
        return errorMessageBuilder.build(e);
    }


    public abstract Object resolveSuccessModel(HttpServletRequest req, HttpServletResponse res)
            throws ControllerArgumentException, IOException;

    public abstract Object resolveFailModel(N2oException e, HttpServletRequest req, HttpServletResponse res);
}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy