【问题标题】:when i pass json object it store null values in mongodb using DTO当我传递 json 对象时,它使用 DTO 在 mongodb 中存储空值
【发布时间】: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;
     }
     }

【问题讨论】:

    标签: json mongodb rest spring-boot 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 的值设置为他自己的字段?
    • 我分叉了你的仓库并创建了一个拉取请求。只需合并它
    猜你喜欢
    • 2015-04-23
    • 1970-01-01
    • 2011-06-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-11-01
    • 2013-09-05
    • 2022-01-21
    相关资源
    最近更新 更多