当前位置: 首页 > 知识库问答 >
问题:

如何返回ObjectId字段作为Rest控制器响应的字符串?

沈华晖
2023-03-14

我在Spring有Rest控制器。

控制器:

@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> {
}

实体:

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

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

目前当我在Postman(或浏览器)中使用方法@GetMap在获得JSON对象响应:

[
    {
        "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"
    }
]

如何以字符串格式将JSON对象fielt“id”作为ObjectId返回?

共有1个答案

翟俊名
2023-03-14

我有一个非常简单的解决方案:

@JsonSerialize(using= ToStringSerializer.class)
private ObjectId id;
...

把它放在Object Id属性上,ObjectId像string一样获取和插入

这是我的答案

 类似资料:
  • 让我们看看下面这个简单的测试控制器(与Spring 4.0.3一起使用): 理论上,两个控制器方法都应该返回有效的JSON。调用第一个controller方法确实会返回以下JSON数组: 但第二个controller方法返回不带引号的字符串,该字符串不是有效的JSON字符串: 为什么会这样?可以配置吗?是虫子吗?还是一个我不懂的特征?

  • 我的问题实质上是对这个问题的跟进。 在上面,Spring会将“hello world”添加到响应体中。如何将字符串作为JSON响应返回?我知道我可以加引号,但这感觉更像是一个黑客。 请提供任何例子来帮助解释这一概念。 注意:我不想直接写到HTTP响应体,我想返回JSON格式的字符串(我正在使用带有RestyGWT的控制器,它要求响应是有效的JSON格式)。

  • 我试着像FOSRestBundleByExample/blob那样做。 我的行动: 不过,我有以下回应: 控制器必须返回一个响应(给定对象(FOS\RestBundle\View\View))。 我发现我可以在配置中将view\u response\u listener更改为true,但我有: 无法找到模板""。 有什么想法吗? 谢谢你,卡米尔

  • 但是,当我返回列表时,就像这段代码: 对于完全相同的API的列表返回类型的响应是正确的响应: [{“SellingPrice”:23000,“ID”:1,“Version”:1,“CreatedOn”:“25Feb 2019,05:53”,“LastUpdatedOn”:“25Feb 2019,05:53”}]

  • 问题内容: 我需要实现一个调用Web服务并返回响应的函数。 我试过了 在调用 Web服务时,将成功调用。但是在接收到响应之前返回。因此,我正在获取重调谐器值“ initial_value”。函数 如何从响应中返回值? 问题答案: GWT不支持同步Ajax,因此您必须使用异步模式对应用程序进行编码。 GWT用于执行请求的低级对象是XMLHttpRequest(旧的IE版本除外),并且GWT总是在as

  • 我刚刚开始使用Spring,希望有知识渊博的人可以帮助我。我有一个使用SpringRest数据的SpringRest存储库。我正在尝试解决如何执行以下操作。 > 公共接口ReadOnlyRepository扩展存储库{T findOne(ID id); } 公共接口ContentRepository扩展了ReadOnlyRepository } //我需要用“...”动态替换的字段@实体公共类内容