Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
当我传递json对象时,它使用DTO在mongodb中存储空值_Json_Mongodb_Rest_Spring Boot_Dto - Fatal编程技术网

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

当我传递json对象时,它使用DTO在mongodb中存储空值,json,mongodb,rest,spring-boot,dto,Json,Mongodb,Rest,Spring Boot,Dto,访问链接 当我发布Json对象时,它会在mongodb中存储所有空值,但当我更新它时,它会工作,我使用的是DTO模式,我认为我在postjob服务实现中的创建方法是错误的,缺少一些逻辑,请帮助 postjobserviceImplementation代码 package postjob.model; import java.util.List; import java.util.Optional; import org.springframework.beans.factory.annotat

访问链接

当我发布Json对象时,它会在mongodb中存储所有空值,但当我更新它时,它会工作,我使用的是DTO模式,我认为我在postjob服务实现中的创建方法是错误的,缺少一些逻辑,请帮助

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;
     }
     }
package postjob.model;
导入java.util.List;
导入java.util.Optional;
导入org.springframework.beans.factory.annotation.Autowired;
导入org.springframework.stereotype.Service;
导入静态java.util.stream.Collectors.toList;
@服务
公共类PostJobServiceImp实现PostJobService{
@自动连线
私有最终postjob存储库;
@自动连线
公共PostJobServiceImp(PostJobRepository存储库){
this.repository=存储库;
}
@凌驾
要创建的公共PostJobDTO(PostJobDTO pj){
PostJob postj=新的PostJob();
repository.save(postj);
返回到(postj);
}
@凌驾
公共PostJobDTO更新(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.getReferenceDocs()、UID.getStatus()、UID.getDateTimeOfPost()、UID.getDescription()、UID.getLocation());
updated=repository.save(已更新);
返回到(已更新);
}
@凌驾
公共列表findAll(){
List postJobEntries=repository.findAll();
返回converttos(postJobEntries);
}
私有列表转换器(列表模型){
返回models.stream()
.map(此::convertto)
.collect(toList());
}
@凌驾
public PostJobDTO findById(字符串id){
PostJob作业=findpostJobById(id);
返回(工作);
}
私有PostJob findpostJobById(字符串id){
可选结果=repository.findOne(id);
返回result.orelsetrow(()->new PostJobNotFoundException(id));
}
私有PostJobdToConvertto(PostJob模型){
PostJobDTO dto=新的PostJobDTO();
setUserid(model.getUserid());
dto.setSummary(model.getSummary());
setCategory(model.getCategory());
dto.setSubCategory(model.getSubCategory());
setDescription(model.getDescription());
setReferenceDocs(model.getReferenceDocs());
setBudget(model.getBudget());
setINR(model.getINR());
setLocation(model.getLocation());
dto.setCity(model.getCity());
dto.setState(model.getState());
setDuration(model.getDuration());
setDateTimeOfPost(model.getDateTimeOfPost());
dto.setStatus(model.getStatus());
setPrivate(model.getPrivate());
返回dto;
}
}
这是您的方法:

@Override
public PostJobDTO create(PostJobDTO pj) {

  PostJob postj = new PostJob();
  repository.save(postj);
  return convertToDTO(postj);
}
我想您想将传递的PostJobDTO
pj
存储在数据库中,是吗

但是您要做的是:完全忽略
pj
,创建一个新的(空的)PostJob并保存这个PostJob

解决方案:

为PostJob创建一个复制构造函数,该构造函数接受PostJobDTO并将dto的值设置为自己的字段

=>

您也可以通过
PostJob convertToEnity(PostJobDTO pj)
来实现

=>


是,要将传递的PostJobDTO pj存储在数据库中,如果提供的答案符合您的需要,请接受它;)如果不让我现在告诉你缺失的是什么,我已经为PostJob创建了一个复制构造函数,它接受PostJobDTO。但是如何将dto的值设置为他自己的字段呢?我分叉了你的repo并创建了一个pull请求。合并就行了
@Override
public PostJobDTO create(PostJobDTO pj) {

  PostJob postj = repository.save(new PostJob(pj));
  return convertToDTO(postj);
}
@Override
public PostJobDTO create(PostJobDTO pj) {

  PostJob postj = repository.save(convertToEntity(pj));
  return convertToDTO(postj);
}