当我传递 json 对象时,它使用 DTO 在 mongodb 中存储空值

when i pass json object it store null values in mongodb using DTO

访问linkhttps://github.com/ashishklae/postjob

当我 post Json 对象时,它将所有空值存储在 mongodb 中,但是当我更新它时它起作用了,我正在使用 DTO 模式,我认为我的创建方法在我的post作业服务实现错误,缺少一些逻辑请帮忙。

postjobserviceImplementation

代码
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;
     }
     }

这是你的方法:

@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);
}