当我传递 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);
}
访问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);
}