我是Spring Framework MVC和LDAP的新手。 我试图制作RESTful API,实际上我已经做到了。 我可以通过调用apis来获取其他json对象。 但是当这些是LDAP类时,我无法获得json对象。 我的意思是我认为LDAP类不能转换为json对象。
哪些LDAP类意味着类具有此批注: @Entry(objectClasses = {" inetOrgPerson"," organizationalPerson"," person"," top"},base =" ou =人&#34)
当我尝试通过调用rest apis来获取json对象时,这是消息: org.springframework.http.converter.HttpMessageNotWritableException:无法编写JSON:找不到类javax.naming.ldap.LdapName $ 1的序列化程序,并且没有发现创建BeanSerializer的属性(以避免异常,禁用SerializationFeature.FAIL_ON_EMPTY_BEANS))(通过参考链) :org.springframework.ldap.samples.useradmin.domain.User [" id"] - > javax.naming.ldap.LdapName [" all"]);嵌套异常是com.fasterxml.jackson.databind.JsonMappingException:找不到类javax.naming.ldap.LdapName $ 1的序列化器,并且没有发现创建BeanSerializer的属性(为了避免异常,禁用SerializationFeature.FAIL_ON_EMPTY_BEANS))(通过引用链:org .springframework.ldap.samples.useradmin.domain.User [" ID"] - > javax.naming.ldap.LdapName中["所有"]) 在org.springframework.http.converter.json.MappingJackson2HttpMessageConverter.writeInternal(MappingJackson2HttpMessageConverter.java:207) 在org.springframework.http.converter.AbstractHttpMessageConverter.write(AbstractHttpMessageConverter.java:179) 在org.springframework.web.servlet.mvc.method.annotation.AbstractMessageConverterMethodProcessor.writeWithMessageConverters(AbstractMessageConverterMethodProcessor.java:148) 在org.springframework.web.servlet.mvc.method.annotation.AbstractMessageConverterMethodProcessor.writeWithMessageConverters(AbstractMessageConverterMethodProcessor.java:90) 在org.springframework.web.servlet.mvc.method.annotation.RequestResponseBodyMethodProcessor.handleReturnValue(RequestResponseBodyMethodProcessor.java:189) 在org.springframework.web.method.support.HandlerMethodReturnValueHandlerComposite.handleReturnValue(HandlerMethodReturnValueHandlerComposite.java:69) 在org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:122) 在org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandleMethod(RequestMappingHandlerAdapter.java:745) 在org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:686) 在org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:80) 在org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:925) 在org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:856) 在org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:953) 在org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:844) 在javax.servlet.http.HttpServlet.service(HttpServlet.java:735) 在org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:829) 在javax.servlet.http.HttpServlet.service(HttpServlet.java:848) 在org.eclipse.jetty.servlet.ServletHolder.handle(ServletHolder.java:684) 在org.eclipse.jetty.servlet.ServletHandler $ CachedChain.doFilter(ServletHandler.java:1496) 在org.springframework.web.filter.HiddenHttpMethodFilter.doFilterInternal(HiddenHttpMethodFilter.java:77) 在org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107) 在org.eclipse.jetty.servlet.ServletHandler $ CachedChain.doFilter(ServletHandler.java:1476) 在org.eclipse.jetty.servlet.ServletHandler.doHandle(ServletHandler.java:499) 在org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:137) 在org.eclipse.jetty.security.SecurityHandler.handle(SecurityHandler.java:557) 在org.eclipse.jetty.server.session.SessionHandler.doHandle(SessionHandler.java:231) at org.eclipse.jetty.server.handler.ContextHandler.doHandle(ContextHandler.java:1086) 在org.eclipse.jetty.servlet.ServletHandler.doScope(ServletHandler.java:428) 在org.eclipse.jetty.server.session.SessionHandler.doScope(SessionHandler.java:193) 在org.eclipse.jetty.server.handler.ContextHandler.doScope(ContextHandler.java:1020) 在org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:135) at org.eclipse.jetty.server.handler.ContextHandlerCollection.handle(ContextHandlerCollection.java:255) 在org.eclipse.jetty.server.handler.HandlerCollection.handle(HandlerCollection.java:154) 在org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:116) 在org.eclipse.jetty.server.Server.handle(Server.java:370) at org.eclipse.jetty.server.AbstractHttpConnection.handleRequest(AbstractHttpConnection.java:494) at org.eclipse.jetty.server.AbstractHttpConnection.headerComplete(AbstractHttpConnection.java:971) at org.eclipse.jetty.server.AbstractHttpConnection $ RequestHandler.headerComplete(AbstractHttpConnection.java:1033) 在org.eclipse.jetty.http.HttpParser.parseNext(HttpParser.java:644) 在org.eclipse.jetty.http.HttpParser.parseAvailable(HttpParser.java:235) at org.eclipse.jetty.server.AsyncHttpConnection.handle(AsyncHttpConnection.java:82) 在org.eclipse.jetty.io.nio.SelectChannelEndPoint.handle(SelectChannelEndPoint.java:667) 在org.eclipse.jetty.io.nio.SelectChannelEndPoint $ 1.run(SelectChannelEndPoint.java:52) 在org.eclipse.jetty.util.thread.QueuedThreadPool.runJob(QueuedThreadPool.java:608) 在org.eclipse.jetty.util.thread.QueuedThreadPool $ 3.run(QueuedThreadPool.java:543) 在java.lang.Thread.run(Thread.java:745) 引起:com.fasterxml.jackson.databind.JsonMappingException:找不到类javax.naming.ldap.LdapName $ 1的序列化器,并且没有发现创建BeanSerializer的属性(为了避免异常,禁用SerializationFeature.FAIL_ON_EMPTY_BEANS))(通过引用链:org .springframework.ldap.samples.useradmin.domain.User [" ID"] - > javax.naming.ldap.LdapName中["所有"]) 在com.fasterxml.jackson.databind.ser.impl.UnknownSerializer.failForEmpty(UnknownSerializer.java:59) at com.fasterxml.jackson.databind.ser.impl.UnknownSerializer.serialize(UnknownSerializer.java:26) 在com.fasterxml.jackson.databind.ser.BeanPropertyWriter.serializeAsField(BeanPropertyWriter.java:569) 在com.fasterxml.jackson.databind.ser.std.BeanSerializerBase.serializeFields(BeanSerializerBase.java:597) at com.fasterxml.jackson.databind.ser.BeanSerializer.serialize(BeanSerializer.java:142) 在com.fasterxml.jackson.databind.ser.BeanPropertyWriter.serializeAsField(BeanPropertyWriter.java:569) 在com.fasterxml.jackson.databind.ser.std.BeanSerializerBase.serializeFields(BeanSerializerBase.java:597) at com.fasterxml.jackson.databind.ser.BeanSerializer.serialize(BeanSerializer.java:142) 在com.fasterxml.jackson.databind.ser.DefaultSerializerProvider.serializeValue(DefaultSerializerProvider.java:118) at com.fasterxml.jackson.databind.ObjectMapper.writeValue(ObjectMapper.java:1819) 在org.springframework.http.converter.json.MappingJackson2HttpMessageConverter.writeInternal(MappingJackson2HttpMessageConverter.java:204) ......还有45个 引起:
com.fasterxml.jackson.databind.JsonMappingException:找不到类javax.naming.ldap.LdapName $ 1的序列化程序,并且没有发现创建BeanSerializer的属性(为了避免异常,禁用SerializationFeature.FAIL_ON_EMPTY_BEANS))(通过引用链:org .springframework.ldap.samples.useradmin.domain.User [" ID"] - > javax.naming.ldap.LdapName中["所有"]) 在com.fasterxml.jackson.databind.ser.impl.UnknownSerializer.failForEmpty(UnknownSerializer.java:59) at com.fasterxml.jackson.databind.ser.impl.UnknownSerializer.serialize(UnknownSerializer.java:26) 在com.fasterxml.jackson.databind.ser.BeanPropertyWriter.serializeAsField(BeanPropertyWriter.java:569) 在com.fasterxml.jackson.databind.ser.std.BeanSerializerBase.serializeFields(BeanSerializerBase.java:597) at com.fasterxml.jackson.databind.ser.BeanSerializer.serialize(BeanSerializer.java:142) 在com.fasterxml.jackson.databind.ser.BeanPropertyWriter.serializeAsField(BeanPropertyWriter.java:569) 在com.fasterxml.jackson.databind.ser.std.BeanSerializerBase.serializeFields(BeanSerializerBase.java:597) at com.fasterxml.jackson.databind.ser.BeanSerializer.serialize(BeanSerializer.java:142) 在com.fasterxml.jackson.databind.ser.DefaultSerializerProvider.serializeValue(DefaultSerializerProvider.java:118) at com.fasterxml.jackson.databind.ObjectMapper.writeValue(ObjectMapper.java:1819) 在org.springframework.http.converter.json.MappingJackson2HttpMessageConverter.writeInternal(MappingJackson2HttpMessageConverter.java:204) 在org.springframework.http.converter.AbstractHttpMessageConverter.write(AbstractHttpMessageConverter.java:179) 在org.springframework.web.servlet.mvc.method.annotation.AbstractMessageConverterMethodProcessor.writeWithMessageConverters(AbstractMessageConverterMethodProcessor.java:148) 在org.springframework.web.servlet.mvc.method.annotation.AbstractMessageConverterMethodProcessor.writeWithMessageConverters(AbstractMessageConverterMethodProcessor.java:90) 在org.springframework.web.servlet.mvc.method.annotation.RequestResponseBodyMethodProcessor.handleReturnValue(RequestResponseBodyMethodProcessor.java:189) 在org.springframework.web.method.support.HandlerMethodReturnValueHandlerComposite.handleReturnValue(HandlerMethodReturnValueHandlerComposite.java:69) 在org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:122) 在org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandleMethod(RequestMappingHandlerAdapter.java:745) 在org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:686) 在org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:80) 在org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:925) 在org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:856) 在org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:953) 在org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:844) 在javax.servlet.http.HttpServlet.service(HttpServlet.java:735) 在org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:829) 在javax.servlet.http.HttpServlet.service(HttpServlet.java:848) 在org.eclipse.jetty.servlet.ServletHolder.handle(ServletHolder.java:684) 在org.eclipse.jetty.servlet.ServletHandler $ CachedChain.doFilter(ServletHandler.java:1496) 在org.springframework.web.filter.HiddenHttpMethodFilter.doFilterInternal(HiddenHttpMethodFilter.java:77) 在org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107) 在org.eclipse.jetty.servlet.ServletHandler $ CachedChain.doFilter(ServletHandler.java:1476) 在org.eclipse.jetty.servlet.ServletHandler.doHandle(ServletHandler.java:499) 在org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:137) 在org.eclipse.jetty.security.SecurityHandler.handle(SecurityHandler.java:557) 在org.eclipse.jetty.server.session.SessionHandler.doHandle(SessionHandler.java:231) at org.eclipse.jetty.server.handler.ContextHandler.doHandle(ContextHandler.java:1086) 在org.eclipse.jetty.servlet.ServletHandler.doScope(ServletHandler.java:428) 在org.eclipse.jetty.server.session.SessionHandler.doScope(SessionHandler.java:193) 在org.eclipse.jetty.server.handler.ContextHandler.doScope(ContextHandler.java:1020) 在org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:135) at org.eclipse.jetty.server.handler.ContextHandlerCollection.handle(ContextHandlerCollection.java:255) 在org.eclipse.jetty.server.handler.HandlerCollection.handle(HandlerCollection.java:154) 在org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:116) 在org.eclipse.jetty.server.Server.handle(Server.java:370) at org.eclipse.jetty.server.AbstractHttpConnection.handleRequest(AbstractHttpConnection.java:494) at org.eclipse.jetty.server.AbstractHttpConnection.headerComplete(AbstractHttpConnection.java:971) at org.eclipse.jetty.server.AbstractHttpConnection $ RequestHandler.headerComplete(AbstractHttpConnection.java:1033) 在org.eclipse.jetty.http.HttpParser.parseNext(HttpParser.java:644) 在org.eclipse.jetty.http.HttpParser.parseAvailable(HttpParser.java:235) at org.eclipse.jetty.server.AsyncHttpConnection.handle(AsyncHttpConnection.java:82) 在org.eclipse.jetty.io.nio.SelectChannelEndPoint.handle(SelectChannelEndPoint.java:667) 在org.eclipse.jetty.io.nio.SelectChannelEndPoint $ 1.run(SelectChannelEndPoint.java:52) 在org.eclipse.jetty.util.thread.QueuedThreadPool.runJob(QueuedThreadPool.java:608) 在org.eclipse.jetty.util.thread.QueuedThreadPool $ 3.run(QueuedThreadPool.java:543) 在java.lang.Thread.run(Thread.java:745)
答案 0 :(得分:1)
此错误意味着-无法序列化JSON数据并将其发送到前端,甚至无法正常进行反序列化。 将@JSONIgnore用作id变量。 根据我的代码,这对我有用。
wyborZadania* obj = new wyborZadania(numerZad,[this](){ tab(); };
答案 1 :(得分:0)
我的解决方案如下
private String wrapDN(Name dn) {
Enumeration<String> allElements = dn.getAll();
StringBuilder value = new StringBuilder();
while (allElements.hasMoreElements()) {
value.append(allElements.nextElement());
value.append(",");
}
value.deleteCharAt(value.length() - 1);
return value.toString();
}
然后将值作为字符串返回
答案 2 :(得分:0)
这对我有用。每个LdapUser的模型类:
@Id
private Name dn;
//other vars, getters, setters are here
public String getDn() {
return dn.toString();
}
@Override
public String toString() {
return String.valueOf(dn);
}
答案 3 :(得分:0)
如果你使用jackson进行序列化,你可以添加这样的类:
@JsonComponent
public class LdapNameSerializer extends JsonSerializer<LdapName> {
@Override
public void serialize(LdapName ldapName, JsonGenerator jsonGenerator,
SerializerProvider serializerProvider) throws IOException {
jsonGenerator.writeString(ldapName.toString());
}
}