как получить сообщения об ошибках из mongoRepository.save()

Я использую mongoRepository.save(), но не могу получить информацию об ошибках, когда дубликаты предотвращают вставку. В качестве теста я вставляю повторяющееся имя пользователя, и монго просто игнорирует его. но когда имя пользователя уникально, оно вставляется, как и ожидалось.

См. ниже мой класс обслуживания:

package com.onlinedateshow.service;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.mongodb.core.MongoTemplate;
import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder;
import org.springframework.stereotype.Service;

import com.mongodb.BasicDBObject;
import com.onlinedateshow.data.model.User;
import com.onlinedateshow.data.repo.user.UserRepository;
import com.onlinedateshow.model.ui.RegisterUI;
import com.onlinedateshow.model.util.RegisterMapper;

@Service
public class RegisterService {
    @Autowired
    private UserRepository userRepo;

    @Autowired
    MongoTemplate template;

    public String addUser(RegisterUI registerData) {

        User newUser = RegisterMapper.toPersistenceBean(registerData);

        try{

            //does not return error, if duplicates are found, silently 
            //ignores the query
            User saveduser = userRepo.save(newUser);


            //below is what I want but don't know how to get it from a repository
            //String error = template.getDb().getLastError().getErrorMessage();
            //return error;
            return null;


        }catch(Exception e){
            return e.getLocalizedMessage();
        }
    }


}

и это мой интерфейс UserRepository:

package com.onlinedateshow.data.repo.user;


import org.springframework.data.mongodb.repository.MongoRepository;
import org.springframework.data.repository.PagingAndSortingRepository;

import com.onlinedateshow.data.model.User;

public interface UserRepository extends MongoRepository<User, String>,
PagingAndSortingRepository<User, String> {
    User findByEmail(String email);

    User findById(String id);

    User findByUserName(String userName);
}

И это мой файл XML, который настраивает MongoDbFactory:

<!-- Activate Spring Data MongoDB repository support -->
    <mongo:repositories base-package="com.mydata.repo.user" />

    <!-- MongoDB host -->
    <mongo:mongo host="${mongo.host.name}" port="${mongo.host.port}" />
    <mongo:db-factory dbname="${mongo.db.name}" />

    <!-- Template for performing MongoDB operations -->
    <bean id="mongoTemplate" class="org.springframework.data.mongodb.core.MongoTemplate"
        c:mongo-ref="mongo" c:databaseName="${mongo.db.name}" />

person David A    schedule 15.08.2013    source источник


Ответы (1)


Убедитесь, что вы настроили соответствующую WriteConcern реализацию MongoTemplate или MongoDbFactory.

JavaDoc для соответствующего метода MongoTemplate: здесь, для SimpleMongoDbFactory используется здесь.

person Oliver Drotbohm    schedule 16.08.2013
comment
Спасибо, Оливер, есть идеи, как настроить MongoDbFactory с помощью Spring? Я не могу найти это нигде. Я обновляю свой пост своей конфигурацией XML. - person David A; 19.08.2013
comment
Я обновил сообщение, чтобы оно содержало ссылки на соответствующие части в JavaDoc. - person Oliver Drotbohm; 19.08.2013
comment
Большое спасибо, Оливер! Я продолжал искать и искать и, наконец, нашел способ добавить проблему в XML, мне нужно было ‹property name=writeConcern value=SAFE/› в моем объявлении Bean. Следующая ссылка также содержит более полный пример. stackoverflow.com/ вопросы/16531663/ - person David A; 20.08.2013