Как исправить ошибку Сериализатор не найден для класса java .util.logging.SimpleFormatter и не найдены свойства для создания BeanSerializer - PullRequest
0 голосов
/ 25 февраля 2020

В java я пытаюсь получить доступ к микросервису Spring Boot, используя следующий код:

try {   
        CircularsSaveParams circularsSaveParams;
        circularsSaveParams= new CircularsSaveParams( request,  principal,  session, locale,  mav,souqBean); //creating microservice params


        HttpHeaders headers = new HttpHeaders();
        headers.setContentType(MediaType.APPLICATION_JSON);
        HttpEntity<?> entity = new HttpEntity<Object>(circularsSaveParams,headers);

        ResponseEntity<Boolean> responseEntity =    restTemplate.exchange("http://localhost:8084/circular-save", HttpMethod.POST, entity, Boolean.class);

        //String employeeDivision= restTemplate.getForObject("http://employee-division-service/"+id+d, String.class);
        status= responseEntity.getBody();


    }

    catch(Exception e)
    {
        e.printStackTrace();
    }

Здесь, кажется, возникают проблемы с полями класса CircularsSaveParams. Ниже приведен класс

import java.security.Principal;
import java.util.Locale;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpSession;

import org.springframework.web.servlet.ModelAndView;

import ae.gov.adm.saeed.bean.CircularsBean;


public class CircularsSaveParams {

    HttpServletRequest request; 
    Principal principal;
    HttpSession session;
    Locale locale; 
    ModelAndView mav;
    CircularsBean souqBean;

    public CircularsSaveParams()
    {


    }


    public CircularsSaveParams(HttpServletRequest request, Principal principal, HttpSession session, Locale locale,
            ModelAndView mav, CircularsBean souqBean) {
        super();
        this.request = request;
        this.principal = principal;
        this.session = session;
        this.locale = locale;
        this.mav = mav;
        this.souqBean = souqBean;
    }

    public HttpServletRequest getRequest() {
        return request;
    }
    public void setRequest(HttpServletRequest request) {
        this.request = request;
    }
    public Principal getPrincipal() {
        return principal;
    }
    public void setPrincipal(Principal principal) {
        this.principal = principal;
    }
    public HttpSession getSession() {
        return session;
    }
    public void setSession(HttpSession session) {
        this.session = session;
    }
    public Locale getLocale() {
        return locale;
    }
    public void setLocale(Locale locale) {
        this.locale = locale;
    }
    public ModelAndView getMav() {
        return mav;
    }
    public void setMav(ModelAndView mav) {
        this.mav = mav;
    }
    public CircularsBean getSouqBean() {
        return souqBean;
    }
    public void setSouqBean(CircularsBean souqBean) {
        this.souqBean = souqBean;
    }



}

. Когда я запускаю код, в этой строке появляется следующая ошибка:

  ResponseEntity<Boolean> responseEntity =    restTemplate.exchange("http://localhost:8084/circular-save", HttpMethod.POST, entity, Boolean.class);

Ниже приведена трассировка стека.

org.springframework.http.converter.HttpMessageNotWritableException: Could not write JSON: No serializer found for class java.util.logging.SimpleFormatter and no properties discovered to create BeanSerializer (to avoid exception, disable SerializationFeature.FAIL_ON_EMPTY_BEANS) ); nested exception is com.fasterxml.jackson.databind.JsonMappingException: No serializer found for class java.util.logging.SimpleFormatter and no properties discovered to create BeanSerializer (to avoid exception, disable SerializationFeature.FAIL_ON_EMPTY_BEANS) ) (through reference chain: ae.gov.adm.saeed.params.CircularsSaveParams["request"]->org.springframework.web.multipart.support.DefaultMultipartHttpServletRequest["request"]->ae.gov.adm.saeed.web.security.AuthFilterHttpServletRequestWrapper["request"]->org.apache.catalina.connector.RequestFacade["servletContext"]->org.apache.catalina.core.ApplicationContextFacade["classLoader"]->org.apache.catalina.loader.ParallelWebappClassLoader["resources"]->org.apache.catalina.webresources.StandardRoot["context"]->org.apache.catalina.core.StandardContext["logger"]->org.apache.juli.logging.DirectJDKLog["logger"]->java.util.logging.Logger["parent"]->java.util.logging.Logger["parent"]->java.util.logging.Logger["parent"]->java.util.logging.Logger["parent"]->java.util.logging.RootLogger["handlers"]->java.util.logging.ConsoleHandler["formatter"])
    at org.springframework.http.converter.json.AbstractJackson2HttpMessageConverter.writeInternal(AbstractJackson2HttpMessageConverter.java:293)
    at org.springframework.http.converter.AbstractGenericHttpMessageConverter.write(AbstractGenericHttpMessageConverter.java:106)
    at org.springframework.web.client.RestTemplate$HttpEntityRequestCallback.doWithRequest(RestTemplate.java:876)
    at org.springframework.web.client.RestTemplate.doExecute(RestTemplate.java:658)
    at org.springframework.web.client.RestTemplate.execute(RestTemplate.java:621)
    at org.springframework.web.client.RestTemplate.exchange(RestTemplate.java:539)
    at ae.gov.adm.saeed.web.controller.util.CircularsControllerUtil.saveCircularView(CircularsControllerUtil.java:357)
    at ae.gov.adm.saeed.web.controller.CircularsController.saveCircular(CircularsController.java:87)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:498)
    at org.springframework.web.method.support.InvocableHandlerMethod.doInvoke(InvocableHandlerMethod.java:205)
    at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:133)
    at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:97)
    at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:827)
    at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:738)
    at org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:85)
    at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:967)
    at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:901)
    at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:970)
    at org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:872)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:660)
    at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:846)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:741)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:231)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
    at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:53)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
    at ae.gov.adm.saeed.web.security.AuthFilter.doFilter(AuthFilter.java:335)
    at ae.gov.adm.saeed.web.security.AuthFilter.doFilter(AuthFilter.java:610)
    at ae.gov.adm.common.web.filter.AbstractFilter.doFilter(AbstractFilter.java:47)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
    at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:197)
    at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:199)
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:96)
    at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:502)
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:140)
    at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:81)
    at org.apache.catalina.valves.AbstractAccessLogValve.invoke(AbstractAccessLogValve.java:651)
    at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:87)
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:342)
    at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:417)
    at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:66)
    at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:754)
    at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1376)
    at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
    at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
    at java.lang.Thread.run(Thread.java:748)
Caused by: com.fasterxml.jackson.databind.JsonMappingException: No serializer found for class java.util.logging.SimpleFormatter and no properties discovered to create BeanSerializer (to avoid exception, disable SerializationFeature.FAIL_ON_EMPTY_BEANS) ) (through reference chain: ae.gov.adm.saeed.params.CircularsSaveParams["request"]->org.springframework.web.multipart.support.DefaultMultipartHttpServletRequest["request"]->ae.gov.adm.saeed.web.security.AuthFilterHttpServletRequestWrapper["request"]->org.apache.catalina.connector.RequestFacade["servletContext"]->org.apache.catalina.core.ApplicationContextFacade["classLoader"]->org.apache.catalina.loader.ParallelWebappClassLoader["resources"]->org.apache.catalina.webresources.StandardRoot["context"]->org.apache.catalina.core.StandardContext["logger"]->org.apache.juli.logging.DirectJDKLog["logger"]->java.util.logging.Logger["parent"]->java.util.logging.Logger["parent"]->java.util.logging.Logger["parent"]->java.util.logging.Logger["parent"]->java.util.logging.RootLogger["handlers"]->java.util.logging.ConsoleHandler["formatter"])
    at com.fasterxml.jackson.databind.ser.impl.UnknownSerializer.failForEmpty(UnknownSerializer.java:59)
    at com.fasterxml.jackson.databind.ser.impl.UnknownSerializer.serialize(UnknownSerializer.java:26)
    at com.fasterxml.jackson.databind.ser.BeanPropertyWriter.serializeAsField(BeanPropertyWriter.java:575)
    at com.fasterxml.jackson.databind.ser.std.BeanSerializerBase.serializeFields(BeanSerializerBase.java:663)
    at com.fasterxml.jackson.databind.ser.BeanSerializer.serialize(BeanSerializer.java:156)
    at com.fasterxml.jackson.databind.ser.std.ObjectArraySerializer.serializeContents(ObjectArraySerializer.java:241)
    at com.fasterxml.jackson.databind.ser.std.ObjectArraySerializer.serialize(ObjectArraySerializer.java:201)
    at com.fasterxml.jackson.databind.ser.std.ObjectArraySerializer.serialize(ObjectArraySerializer.java:25)
    at com.fasterxml.jackson.databind.ser.BeanPropertyWriter.serializeAsField(BeanPropertyWriter.java:575)
    at com.fasterxml.jackson.databind.ser.std.BeanSerializerBase.serializeFields(BeanSerializerBase.java:663)
    at com.fasterxml.jackson.databind.ser.BeanSerializer.serialize(BeanSerializer.java:156)
    at com.fasterxml.jackson.databind.ser.BeanPropertyWriter.serializeAsField(BeanPropertyWriter.java:575)
    at com.fasterxml.jackson.databind.ser.std.BeanSerializerBase.serializeFields(BeanSerializerBase.java:663)
    at com.fasterxml.jackson.databind.ser.BeanSerializer.serialize(BeanSerializer.java:156)
    at com.fasterxml.jackson.databind.ser.BeanPropertyWriter.serializeAsField(BeanPropertyWriter.java:575)
    at com.fasterxml.jackson.databind.ser.std.BeanSerializerBase.serializeFields(BeanSerializerBase.java:663)
    at com.fasterxml.jackson.databind.ser.BeanSerializer.serialize(BeanSerializer.java:156)
    at com.fasterxml.jackson.databind.ser.BeanPropertyWriter.serializeAsField(BeanPropertyWriter.java:575)
    at com.fasterxml.jackson.databind.ser.std.BeanSerializerBase.serializeFields(BeanSerializerBase.java:663)
    at com.fasterxml.jackson.databind.ser.BeanSerializer.serialize(BeanSerializer.java:156)
    at com.fasterxml.jackson.databind.ser.BeanPropertyWriter.serializeAsField(BeanPropertyWriter.java:575)
    at com.fasterxml.jackson.databind.ser.std.BeanSerializerBase.serializeFields(BeanSerializerBase.java:663)
    at com.fasterxml.jackson.databind.ser.BeanSerializer.serialize(BeanSerializer.java:156)
    at com.fasterxml.jackson.databind.ser.BeanPropertyWriter.serializeAsField(BeanPropertyWriter.java:575)
    at com.fasterxml.jackson.databind.ser.std.BeanSerializerBase.serializeFields(BeanSerializerBase.java:663)
    at com.fasterxml.jackson.databind.ser.BeanSerializer.serialize(BeanSerializer.java:156)
    at com.fasterxml.jackson.databind.ser.BeanPropertyWriter.serializeAsField(BeanPropertyWriter.java:575)
    at com.fasterxml.jackson.databind.ser.std.BeanSerializerBase.serializeFields(BeanSerializerBase.java:663)
    at com.fasterxml.jackson.databind.ser.BeanSerializer.serialize(BeanSerializer.java:156)
    at com.fasterxml.jackson.databind.ser.BeanPropertyWriter.serializeAsField(BeanPropertyWriter.java:575)
    at com.fasterxml.jackson.databind.ser.std.BeanSerializerBase.serializeFields(BeanSerializerBase.java:663)
    at com.fasterxml.jackson.databind.ser.BeanSerializer.serialize(BeanSerializer.java:156)
    at com.fasterxml.jackson.databind.ser.BeanPropertyWriter.serializeAsField(BeanPropertyWriter.java:575)
    at com.fasterxml.jackson.databind.ser.std.BeanSerializerBase.serializeFields(BeanSerializerBase.java:663)
    at com.fasterxml.jackson.databind.ser.BeanSerializer.serialize(BeanSerializer.java:156)
    at com.fasterxml.jackson.databind.ser.BeanPropertyWriter.serializeAsField(BeanPropertyWriter.java:575)
    at com.fasterxml.jackson.databind.ser.std.BeanSerializerBase.serializeFields(BeanSerializerBase.java:663)
    at com.fasterxml.jackson.databind.ser.BeanSerializer.serialize(BeanSerializer.java:156)
    at com.fasterxml.jackson.databind.ser.BeanPropertyWriter.serializeAsField(BeanPropertyWriter.java:575)
    at com.fasterxml.jackson.databind.ser.std.BeanSerializerBase.serializeFields(BeanSerializerBase.java:663)
    at com.fasterxml.jackson.databind.ser.BeanSerializer.serialize(BeanSerializer.java:156)
    at com.fasterxml.jackson.databind.ser.BeanPropertyWriter.serializeAsField(BeanPropertyWriter.java:575)
    at com.fasterxml.jackson.databind.ser.std.BeanSerializerBase.serializeFields(BeanSerializerBase.java:663)
    at com.fasterxml.jackson.databind.ser.BeanSerializer.serialize(BeanSerializer.java:156)
    at com.fasterxml.jackson.databind.ser.BeanPropertyWriter.serializeAsField(BeanPropertyWriter.java:575)
    at com.fasterxml.jackson.databind.ser.std.BeanSerializerBase.serializeFields(BeanSerializerBase.java:663)
    at com.fasterxml.jackson.databind.ser.BeanSerializer.serialize(BeanSerializer.java:156)
    at com.fasterxml.jackson.databind.ser.BeanPropertyWriter.serializeAsField(BeanPropertyWriter.java:575)
    at com.fasterxml.jackson.databind.ser.std.BeanSerializerBase.serializeFields(BeanSerializerBase.java:663)
    at com.fasterxml.jackson.databind.ser.BeanSerializer.serialize(BeanSerializer.java:156)
    at com.fasterxml.jackson.databind.ser.DefaultSerializerProvider.serializeValue(DefaultSerializerProvider.java:129)
    at com.fasterxml.jackson.databind.ObjectWriter.writeValue(ObjectWriter.java:851)
    at org.springframework.http.converter.json.AbstractJackson2HttpMessageConverter.writeInternal(AbstractJackson2HttpMessageConverter.java:286)

Обратите внимание, что у меня определен следующий метод:

@Bean
public MappingJackson2HttpMessageConverter mappingJackson2HttpMessageConverter() {
    ObjectMapper mapper = new ObjectMapper();
    mapper.configure(SerializationFeature.FAIL_ON_EMPTY_BEANS, false);
    MappingJackson2HttpMessageConverter converter = 
        new MappingJackson2HttpMessageConverter(mapper);
    return converter;
}

Как решить проблему?

Обновление: Я пытался определить свой объект как это, после некоторых исследований:

circularsSaveParams= mapper.convertValue(new CircularsSaveParams( request,  principal,  session, locale,  mav,souqBean), CircularsSaveParams.class); //creating microservice params

Однако проблема не была решена. Появляется та же ошибка.

Редактировать Вот как выглядит код сервера:

@RequestMapping(value="/circular-save", method=RequestMethod.POST)
public Boolean saveCircularView(@RequestBody  CircularsSaveParams circularsSaveParams) {


    System.out.println( "circular-save microservice Called..................................");

    HttpServletRequest request= circularsSaveParams.getRequest();
    Principal principal= circularsSaveParams.getPrincipal();
    HttpSession session= circularsSaveParams.getSession();
    Locale locale = circularsSaveParams.getLocale();
    CircularsBean souqBean = circularsSaveParams.getSouqBean();

    boolean status = false;
    boolean isModifyRequest = false;
    GmCirculars gmCircular = null;
    try {

        if(null!=souqBean.getCircularEntryId() && !BigDecimal.ZERO.equals(souqBean.getCircularEntryId())) {
            gmCircular = circularsService.findById(souqBean.getCircularEntryId());
            isModifyRequest = true;
        }

        gmCircular = souqBean.populateCircularEntity(gmCircular);
        ApplicationUser applicationUser = getLoggedInUser(request, principal);
        gmCircular.setOrganization(applicationUser.getOrganization());

        //LOG.info("Ajax Call to Save Circular [" + gmCircular + "]");

        if(!isModifyRequest) {
            gmCircular.setCreatedBy(applicationUser);
            gmCircular.setCreatedOn(new Date());
        }
        if(souqBean.getShowOnDashboard() == null)
            gmCircular.setShowOnDashboard(new BigDecimal(0));

        GmCirculars savedObj = circularsService.saveOrUpdate(gmCircular);

        if(null!=savedObj && null != savedObj.getId() && !BigDecimal.ZERO.equals(savedObj.getId())) {   
            status = true;
        }
        else {
            status = false;
        }

      String externaDoclId=null;
        //Saving Attachment 
        MultipartFile fileDataIcon = souqBean.getCircularAttachment();
        if (null != savedObj && null != savedObj.getId() && !BigDecimal.ZERO.equals(savedObj.getId())) {

            if (null != fileDataIcon && fileDataIcon.getSize() > 0) {

                Documents uploadedDoc = uploadMuFile(request, fileDataIcon, principal, savedObj.getId(), ModuleEnums.GM_CIRCULARS,null);

                if (uploadedDoc != null && uploadedDoc.getId() != null) {
                    savedObj.setDocumentId(uploadedDoc.getId()); //Modified BY ZAID ZAID ZAID ZAID ZAID ZAID
                    savedObj = circularsService.saveOrUpdate(gmCircular);
                    status = true;

                    externaDoclId=uploadedDoc.getExternalDocumentId();
                }
                else {
                    status = false;
                }
            }
            else { // without doc
                status = true;
            }

            if(status) {
                saveUserActivityLog(applicationUser, ModuleEnums.GM_CIRCULARS.getValue(), savedObj.getId(), 
                    isModifyRequest ? ActionTypeEnums.EDIT.getValue() : ActionTypeEnums.ADD.getValue());
            }
        }





    }
    catch (Exception e) {
        status = false;
        e.printStackTrace();
    }


    System.out.println("circulars save microservice is DONE!........................................status is:"+status);
    return status;
}

1 Ответ

1 голос
/ 02 марта 2020

Вы думаете, что это неправильно. Вы не можете и не должны делиться запросами между приложениями. Вы должны использовать какого-либо пользователя службы или некоторые сгенерированные oauth-токены для связи с другими успокоительными микро-службами, в отличие от передачи основного пользователя. Вы всегда можете получить пользователя из db, если у вас есть уникальный способ идентифицировать пользователя, например, какой-нибудь порядковый номер.

Если вы пытаетесь переместить свои бэкэнд-сервисы на другие микросервисы, вам следует отправлять только ту информацию, которая необходима для бэкэнд и поручить вызывающему микросервису позаботиться об аутентификации / авторизации и пользовательских сессиях / аудите.

С вашей серверной реализации похоже, что вы отслеживаете, кто / что запросил к микросервису. Это можно отследить при вызове микросервисов перед отправкой запроса. Если у вас много таких микросервисов, вы можете создать центральный прокси-сервер (еще один микросервис), который заботится о регистрации / аудите пользовательских запросов перед маршрутизацией на вызываемый микросервис.

...