Весна. Как вернуть поле ObjectId как String в ответе контроллера Rest? - PullRequest
0 голосов
/ 02 октября 2019

У меня есть контроллер Rest на Spring.

Контроллер:

@RestController
@RequestMapping("/users")
public class Controller {

    private UserService userService;

    @Autowired
    public Controller(UserService userService) {
        this.userService = userService;
    }

    @GetMapping("/all")
    public List<User> fethAllUsers() {
        return userService.fetchAllUsers();
    }

    @GetMapping("/{id}")
    public User getUser(@PathVariable ObjectId id) {
        return userService.fetchUser(id);
    }

    @PostMapping("/")
    public User createUser(@RequestParam String name, @RequestParam String address) {
        return userService.createUser(name, address);
    }

    @DeleteMapping("/{id}")
    public void deleteUser(@PathVariable ObjectId id) {
        userService.deleteUser(id);
    }
}

Сервис:

@Service
public class UserService {

    private UserRepository userRepository;

    @Autowired
    public UserService(UserRepository userRepository) {
        this.userRepository = userRepository;
    }

    public List<User> fetchAllUsers() {
        return userRepository.findAll();
    }

    public User fetchUser(ObjectId id) {
        Optional<User> optionalUser = userRepository.findById(id);
        return optionalUser.orElseGet(optionalUser::get);
    }

    public User createUser(String name, String address) {
        User user = new User();
        user.setId(ObjectId.get());
        user.setName(name);
        user.setAddress(address);
        return userRepository.save(user);
    }

    public void deleteUser(ObjectId id) {
        userRepository.deleteById(id);
    }
}

Хранилище:

@Repository
public interface UserRepository extends MongoRepository<User, ObjectId> {
}

Entity:

import lombok.Data;
import org.bson.types.ObjectId;

@Data
public class User {
    private ObjectId id;
    private String name;
    private String address;
}

В настоящее время, когда я использую метод @GetMapping в Postman (или браузере) в ответе объект JSON в get:

[
    {
        "id": {
            "timestamp": 1569940881,
            "machineIdentifier": 9478066,
            "processIdentifier": 10308,
            "counter": 14051396,
            "time": 1569940881000,
            "date": "2019-10-01T14:41:21.000+0000",
            "timeSecond": 1569940881
        },
        "name": "testName",
        "address": "testAddress"
    }
]

И в ответ мне нужно поле "id" в строкеформат и выглядит следующим образом:

[
    {
        "id": "5d936591909fb22844d66844",
        "name": "testName",
        "address": "testAddress"
    }
]

Как я могу вернуть в ответ "ID" объекта JSON в виде ObjectId в формате String?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...