我通过DTO从我的表单中获取数据并将其映射到我的Hibernate实体.我想跳过一个日期字段,因为传入的数据是所有字符串,我需要将字符串字段转换为与其他字段分开的日期.其余字段将从传入的DTO直接映射.该过程适用于第一个请求,但在后续请求中,抛出以下异常:
1) A mapping already exists for com.ibm.calypso.entity.WmCompIdfn.setEffStartDate().
1 error
at org.modelmapper.internal.Errors.toConfigurationException(Errors.java:250)
at org.modelmapper.internal.TypeMapImpl.addMappings(TypeMapImpl.java:76)
at org.modelmapper.internal.TypeMapStore.getOrCreate(TypeMapStore.java:110)
at org.modelmapper.ModelMapper.addMappings(ModelMapper.java:93)
at com.ibm.calypso.service.CompanyServiceImpl.updateIdentificationIdfn(CompanyServiceImpl.java:48)
at com.ibm.calypso.controller.CompanyController.updateIdentificationIdfn(CompanyController.java:76)
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:221)
at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:137)
at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:110)
at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:806)
at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:729)
at org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:85)
at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:959)
at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:893)
at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:970)
at org.springframework.web.servlet.FrameworkServlet.doPut(FrameworkServlet.java:883)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:651)
at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:846)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:729)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:292)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:207)
at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:240)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:207)
at com.ibm.calypso.filter.CORSFilter.doFilterInternal(CORSFilter.java:29)
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:240)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:207)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:212)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:106)
at …Run Code Online (Sandbox Code Playgroud) 我正在使用ModelMapper在对象之间进行直接映射.
ModelMapper mapper = new ModelMapper();
// TypeMap created
mapper.map(sourceObj, destObj);
mapper = new ModelMapper();
// TypeMap is recreated
mapper.map(sourceObj, destObj);
Run Code Online (Sandbox Code Playgroud)
我在源代码中发现,如果TypeMap之间不存在sourceObj,并destObj认为这将缓存TypeMap中的getOrCreate方法.
据我所知,这个缓存与mapper实例绑定,这意味着如果我必须使用新的ModelMapper实例第二次映射sourceObjto destObj,它将不得不重新创建TypeMap.
我假定这是一个相当昂贵的操作,说如果我映射的集合sourceObj来destObj.这使我得出结论,我应该重用ModelMapper实例.
这个结论是否正确?
谢谢
我在 Java 中面临一个非常奇怪的行为。我得到了两个没有层次连接的不同类:类模板(类型层次结构是对象 -> A -> B -> 模板)和类 TemplateDto(对象 -> TemplateDto)。
我使用 ModelMapper (org.modelmapper.ModelMapper) 在两个类之间进行映射(由于字段名称相同,因此使用默认映射)。
有以下代码:
List<Template> templates = cvService.getTemplates();
List<TemplateDto> resultDtos = new ArrayList<TemplateDto>();
modelMapper.map(templates,resultDtos);
TemplateDto example = resultDtos.get(0);
Run Code Online (Sandbox Code Playgroud)
最后一行抛出:
java.lang.ClassCastException: com.vs.framework.domain.cv.Template cannot be cast to com.vs.framework.dto.cv.TemplateDto
Run Code Online (Sandbox Code Playgroud)
这很奇怪。当我调试本节时,我看到映射后,resultDtos 是一个 List 类型的列表,而不是 List,这让我大吃一惊。
我试图清理我的 tomcat,maven 清理安装,但它仍然发生。
有任何想法吗?
ModelMapper(http://modelmapper.org/)是否支持排除属性的内容?如果该值为null.
我刚刚找到了PropertyMap.但这对我来说是一个约束.因为我必须描述我想要的特定属性.
像这样.
ModelMapper modelMapper = new ModelMapper();
modelMapper.addMappings(new PropertyMap<TestObject, TestObject>() {
@Override
protected void configure() {
when(Conditions.isNull()).skip().setName(source.getName());
when(Conditions.isNull()).skip().set...(source.get...());
when(Conditions.isNull()).skip().set...(source.get...());
when(Conditions.isNull()).skip().set...(source.get...());
when(Conditions.isNull()).skip().set...(source.get...());
when(Conditions.isNull()).skip().set...(source.get...());
}
});
Run Code Online (Sandbox Code Playgroud)
在我的情况下,我有很多财产和冗长.如果映射属性从它们中为空,如何排除它们.有更舒适的解决方案吗?
谢谢.
这是我的 DTO:
public class TagVolumeDTO {
private Long id;
private Long idTag;
//...
}
public class TagTDO {
private Long id;
private Long amount;
//...
}
Run Code Online (Sandbox Code Playgroud)
这是我的实体:
public class TagVolume {
private Long id;
private Tag tag;
//...
}
public class Tag {
private Long id;
private Long amount;
//...
}
Run Code Online (Sandbox Code Playgroud)
我想配置我的 ModelMapper 将 Tag#id 映射到 TagVolumeDTO#idTag。那可能吗?
我打算编写一个方法,用于更新具有MyObject另一个MyObject对象的非空字段的对象。
private void updateMyObject(MyObject sourceObject, MyObject destinationObject) {
ModelMapper mapper = new ModelMapper();
mapper.getConfiguration().setPropertyCondition(Conditions.isNotNull());
mapper.map(sourceObject, destinationObject);
}
public class MyObject {
long id;
long durationInMilliSecounds;
//...getters and setters
}
Run Code Online (Sandbox Code Playgroud)
在这里destinationObject没有得到更新。任何人都可以建议此代码的问题。
我正在使用 ModelMapper 将 JPA 实体映射到 DTO。我在实体上有集合 dto 是由 wsimport 从 wsdl 文件生成的,但集合的设置器不会生成
public class sampleEntity{
private String name;
private Collection<String> list;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Collection<String> getList() {
return list;
}
public void setList(Collection<String> list) {
this.list = list;
}
}
public class sampleDTO{
private String name;
private Collection<String> list;
//getters & setters
public String getName() {
return name;
}
public void setName(String name) {
this.name = …Run Code Online (Sandbox Code Playgroud) 我是 MongoDB 新手,正在为 Mongo 支持的 REST Web 服务编写一系列单元测试。这是 /clients/{id} enpoint 的简单测试:
@RunWith(MockitoJUnitRunner.class)
public class ClientsControllerMockMvcStandaloneTest {
private MockMvc mvc;
@Mock
private ClientsRepository clientsRepository;
@Mock
private ModelMapper modelMapper;
@InjectMocks
private ClientsController clientsController;
private ExceptionHandlerExceptionResolver createExceptionResolver() {
ExceptionHandlerExceptionResolver exceptionResolver = new ExceptionHandlerExceptionResolver() {
@SuppressWarnings("ConstantConditions")
@Override
protected ServletInvocableHandlerMethod getExceptionHandlerMethod(final HandlerMethod handlerMethod,
final Exception exception) {
final Method method = new ExceptionHandlerMethodResolver(RestResponseEntityExceptionHandler.class)
.resolveMethod(exception);
final RestResponseEntityExceptionHandler handler = new RestResponseEntityExceptionHandler();
return new ServletInvocableHandlerMethod(handler, method);
}
};
exceptionResolver.getMessageConverters().add(new MappingJackson2HttpMessageConverter());
exceptionResolver.afterPropertiesSet();
return exceptionResolver;
}
@Before
public void …Run Code Online (Sandbox Code Playgroud) 我尝试使用 ModelMapper 将 @Entity 转换为 DTO,所以出现以下错误:
org.modelmapper.MappingException: ModelMapper mapping errors:
1) Converter org.modelmapper.internal.converter.CollectionConverter@f3e6876 failed to convert java.util.List to java.util.List.
1 error
Run Code Online (Sandbox Code Playgroud)
有人可以帮助我吗?
如何将java.util.Map映射到POJO?
以下测试给出了配置错误.
似乎打开了一个类似的问题,但它没有得到解决https://github.com/jhalterman/modelmapper/issues/116.
测试:
package org.me.modelmapper;
import java.util.HashMap;
import org.modelmapper.ModelMapper;
import org.modelmapper.PropertyMap;
import org.testng.Assert;
import org.testng.annotations.BeforeMethod;
import org.testng.annotations.Test;
public class MapperTest {
private ModelMapper modelMapper;
public MapperTest() {
}
public static class Foo {
public String a;
public String b;
public String getA() {
return a;
}
public void setA(String a) {
this.a = a;
}
public String getB() {
return b;
}
public void setB(String b) {
this.b = b;
}
}
@BeforeMethod
public void setUpMethod() throws …Run Code Online (Sandbox Code Playgroud)