当我传递 json 对象时,它使用 DTO 在 mongodb 中存储空值
Posted
技术标签:
【中文标题】当我传递 json 对象时,它使用 DTO 在 mongodb 中存储空值【英文标题】:when i pass json object it store null values in mongodb using DTO 【发布时间】:2016-04-19 12:36:17 【问题描述】:访问链接https://github.com/ashishklae/postjob
当我发布 Json 对象时,它会将所有空值存储在 mongodb 中,但是当我更新它时,它可以工作,我使用的是 DTO 模式,我认为我在我的 postjob 服务实现中的 create 方法是错误的,缺少一些逻辑,请帮助。
postjobservice实现代码
package postjob.model;
import java.util.List;
import java.util.Optional;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import static java.util.stream.Collectors.toList;
@Service
public class PostJobServiceImp implements PostJobService
@Autowired
private final PostJobRepository repository;
@Autowired
public PostJobServiceImp(PostJobRepository repository)
this.repository = repository;
@Override
public PostJobDTO create(PostJobDTO pj)
PostJob postj = new PostJob();
repository.save(postj);
return convertToDTO(postj);
@Override
public PostJobDTO update(PostJobDTO UID)
PostJob updated = findpostJobById(UID.getId());
updated.update(UID.getUserid(), UID.getSummary(),UID.getCategory(),UID.getSubCategory(),UID.getState(), UID.getPrivate(), UID.getBudget(),UID.getCity(),UID.getDuration(),UID.getINR(), UID.getReferenceDocs(), UID.getStatus(), UID.getDateTimeOfPost(), UID.getDescription(), UID.getLocation());
updated = repository.save(updated);
return convertToDTO(updated);
@Override
public List<PostJobDTO> findAll()
List<PostJob> postJobEntries = repository.findAll();
return convertToDTOs(postJobEntries);
private List<PostJobDTO> convertToDTOs(List<PostJob> models)
return models.stream()
.map(this::convertToDTO)
.collect(toList());
@Override
public PostJobDTO findById(String id)
PostJob job = findpostJobById(id);
return convertToDTO(job);
private PostJob findpostJobById(String id)
Optional<PostJob> result = repository.findOne(id);
return result.orElseThrow(() -> new PostJobNotFoundException(id));
private PostJobDTO convertToDTO(PostJob model)
PostJobDTO dto = new PostJobDTO();
dto.setUserid(model.getUserid());
dto.setSummary(model.getSummary());
dto.setCategory(model.getCategory());
dto.setSubCategory(model.getSubCategory());
dto.setDescription(model.getDescription());
dto.setReferenceDocs(model.getReferenceDocs());
dto.setBudget(model.getBudget());
dto.setINR(model.getINR());
dto.setLocation(model.getLocation());
dto.setCity(model.getCity());
dto.setState(model.getState());
dto.setDuration(model.getDuration());
dto.setDateTimeOfPost(model.getDateTimeOfPost());
dto.setStatus(model.getStatus());
dto.setPrivate(model.getPrivate());
return dto;
【问题讨论】:
【参考方案1】:这是你的方法:
@Override
public PostJobDTO create(PostJobDTO pj)
PostJob postj = new PostJob();
repository.save(postj);
return convertToDTO(postj);
我认为您想将传递的 PostJobDTO pj
存储在您的数据库中,不是吗?
但是你要做的是:你完全忽略pj
,并创建一个新的(空的)PostJob 并保存这个。
解决方案:
为 PostJob 创建一个复制构造函数,它接受一个 PostJobDTO 并将 dto 的值设置为他自己的字段。
=>
@Override
public PostJobDTO create(PostJobDTO pj)
PostJob postj = repository.save(new PostJob(pj));
return convertToDTO(postj);
您也可以通过PostJob convertToEnity(PostJobDTO pj)
进行操作。
=>
@Override
public PostJobDTO create(PostJobDTO pj)
PostJob postj = repository.save(convertToEntity(pj));
return convertToDTO(postj);
【讨论】:
是的,想将传递的 PostJobDTO pj 存储在您的数据库中, 如果提供的答案符合您的需求,请接受它;)如果不让我现在缺少什么 我为 PostJob 创建了一个复制构造函数,它采用 PostJobDTO。 但是如何将 dto 的值设置为他自己的字段? 我分叉了你的仓库并创建了一个拉取请求。只需合并它以上是关于当我传递 json 对象时,它使用 DTO 在 mongodb 中存储空值的主要内容,如果未能解决你的问题,请参考以下文章