当我传递json对象时,它使用DTO在mongodb中存储空值
访问链接 当我发布Json对象时,它会在mongodb中存储所有空值,但当我更新它时,它会工作,我使用的是DTO模式,我认为我在postjob服务实现中的创建方法是错误的,缺少一些逻辑,请帮助 postjobserviceImplementation代码当我传递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
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);
}
我想您想将传递的PostJobDTOpj
存储在数据库中,是吗
但是您要做的是:完全忽略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);
}