小编Fra*_*nso的帖子

使用Gson反序列化Map <String,Object>字段

我有一个具有这种结构的User对象:

class User {
    private String id;
    private String name;
    private Map<String, Object> properties;

    // GETTERS & SETTERS
}
Run Code Online (Sandbox Code Playgroud)

我有一个具有这种结构的JSON字符串:

{
    "user": {
        "id:"123456789",
        "name:"azerty",
        "emailHash":"123456789", // not used in User class
        "properties": {
            "p1":1,
            "p2":"test",
            "p3":[1, 2, 3, 4],
            "p4":{
               etc...
            }
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

属性的键是String,属性的值可以是String,int,Array,boolean,Map等.

我尝试用Gson反序列化这个JSON字符串:

JsonParser parser = new JsonParser();
JsonElement element = parser.parse(jsonString);
JsonObject object = element.getAsJsonObject();

GsonBuilder builder = new GsonBuilder();
builder.setFieldNamingPolicy(FieldNamingPolicy.LOWER_CASE_WITH_UNDERSCORES);
Gson gson = builder.create();
User user = (User) gson.fromJson(object.get("user"), new TypeToken<User>() {}.getType());
Run Code Online (Sandbox Code Playgroud)

字段'id'和'name'被正确注入,但字段'properties'保持为null. …

java json gson

15
推荐指数
1
解决办法
1万
查看次数

如何在192.168.xx上提供symfony应用程序?

当我启动命令php app/console server时:运行我的应用程序在localhost:8000上提供,并且无法使用我的本地IP地址192.168.0.41:8000访问.

我怎样才能做到这一点?

我在MacOSX Maverick下,我不想使用apache或nginx.我只想逐步完成PHP内置的嵌入式服务器.

谢谢你的帮助.

symfony

9
推荐指数
2
解决办法
6728
查看次数

Spring Data MongoDB:当Document嵌入另一个时,如何忽略唯一索引字段?

我有一个像这样定义的Contract类:

@Document
public class Contract {

    @Id
    private String id;

    @Indexed(unique = true)
    private String ref;

    private String status = "pending";

    // getter & setter & hashcode & equals & tostring...
}
Run Code Online (Sandbox Code Playgroud)

我希望随着时间的推移保存合同状态,所以我创建了一个这样的Version类:

@Document
public class Version {

    @Id
    private String id;

    private Contract contract;

    private Instant createdAt;

    // getter & setter & hashcode & equals & tostring...
}
Run Code Online (Sandbox Code Playgroud)

当我尝试多次保存版本对象时,我有一个重复的键异常.我认为这是合约裁判的重复关键指数,在这里抱怨.

我怎样才能做到这一点?

java spring spring-data-mongodb

7
推荐指数
2
解决办法
942
查看次数

taskScheduler池的奇怪行为

我有两个弹簧启动应用程序(1.4.3.RELEASE),它们位于同一台服务器上.应用程序A是一个单一的应用程序,其中包含用于处理警报的部分代码,而应用程序B是一个仅处理警报的新专用应用程序.这里的目标是打破小应用程序中的monolotic应用程序.现在,这两个代码一起运行,因为我有旧系统,总是调用应用程序A.

这两个应用程序有一个基于ThreadPoolTask​​Scheduler配置的taskScheduler.

@Configuration
public class TaskSchedulerConfig {

    @Bean
    public TaskScheduler taskScheduler() {
        ThreadPoolTaskScheduler threadPoolTaskScheduler = new ThreadPoolTaskScheduler();
        threadPoolTaskScheduler.setWaitForTasksToCompleteOnShutdown(true);
        threadPoolTaskScheduler.setPoolSize(100);

        return threadPoolTaskScheduler;
    }
}
Run Code Online (Sandbox Code Playgroud)

昨天,我经历了一个奇怪的行为:

  1. 检测到警报并将其发送到新应用程序B - >确定
  2. 应用程序B收到警报并开始根据taskScheduler处理它 - >确定
  3. 第一步已由应用程序B处理 - >确定
  4. 第二步已经被app A - > NOK处理,这是一种奇怪的行为
  5. 第三步已由应用程序B按预期处理 - >确定

这怎么可能?对我来说,每个taskScheduler都附加到创建它的应用程序.我哪里错了?

UPDATE

我有一个发出警报的真实盒子.这些警报必须由新应用程序处理.但我还有旧盒子没有迁移到新系统.所以我在两个不同的项目中有处理代码.

我有一个新代码的新框,它在新系统上创建了一个警报.此警报生成一个状态机,该状态机与任务调度程序异步处理.创建警报后,新应用程序开始处理状态机,并在处理过程中唤醒旧应用程序并处理警报步骤.之后,新应用程序再次唤醒并正常关闭警报.

问题是:为什么旧应用程序会唤醒以处理警报?threadPoolTask​​Scheduler是否存在已知问题?

java spring

6
推荐指数
1
解决办法
150
查看次数

如何在Spring Data MongoDB中保存和查询动态字段?

我在Spring boot 1.4.x分支和Spring Data MongoDB上.

我想扩展Pojo,HashMap使其有可能动态保存新属性.

我知道我可以Map<String, Object>在Entry类中创建一个属性来保存其动态值,但我不想拥有内部结构.我的目标是让root的入门类中的所有字段都像这样序列化它:

{
   "id":"12334234234",
   "dynamicField1": "dynamicValue1",
   "dynamicField2": "dynamicValue2"
}
Run Code Online (Sandbox Code Playgroud)

所以我创建了这个Entry类:

@Document
public class Entry extends HashMap<String, Object> {

    @Id
    private String id;

    public String getId() {
        return id;
    }

    public void setId(String id) {
        this.id = id;
    }
}
Run Code Online (Sandbox Code Playgroud)

和这样的存储库:

public interface EntryRepository extends MongoRepository<Entry, String> {
}
Run Code Online (Sandbox Code Playgroud)

当我启动我的应用程序时,我有这个错误:

Error creating bean with name 'entryRepository': Invocation of init method failed; nested exception is org.springframework.data.mapping.model.MappingException: Could not lookup mapping metadata for …
Run Code Online (Sandbox Code Playgroud)

java spring mongodb spring-data

6
推荐指数
1
解决办法
6593
查看次数

如何使用zuul过滤器转换客户端请求正文?

我想使用 Zuul 对来自客户端的请求进行身份验证、转换和转发到内部服务。目标是向客户端隐藏遗留 API。

我的想法是:客户端将带有对象 A 的 JSON 表示的 POST 请求发送到嵌入 Zuul 的 API 网关。API Gateway 将 body 从 A 转换为 LegacyA 并将其发送到内部服务。

例如,我搜索了一种转换以下 JSON 的方法:

["hello","world"]
Run Code Online (Sandbox Code Playgroud)

在这个 JSON 中:

{hashCode("hello"):"hello", hashCode("world"):"world")}
Run Code Online (Sandbox Code Playgroud)

我想使用前置过滤器。但是我在重写有效请求时遇到问题。

你知道我该怎么做吗?

我写了这个过滤器:

public class RestZuulFilter extends ZuulFilter {

    private final ObjectMapper objectMapper;

    @Autowired
    public RestZuulFilter(ObjectMapper objectMapper) {
        this.objectMapper = objectMapper;
    }

    @Override
    public String filterType() {
        return "pre";
    }

    @Override
    public int filterOrder() {
        return 100;
    }

    @Override
    public boolean shouldFilter() {
        return true;
    }

    @Override
    public …
Run Code Online (Sandbox Code Playgroud)

java spring netflix-zuul

4
推荐指数
1
解决办法
1万
查看次数

怎么阻止.@运营商?

我在沙箱Groovy上工作,我想阻止.@运营商.我正在使用一个SecureASTCustomizer,我已经写了一个自定义SecureASTCustomizer.ExpressionChecker删除授权.

我的问题是:我找不到检测@运算符的方法.

groovy

2
推荐指数
1
解决办法
72
查看次数

如何使用 Docker compose 制作 MongoDB 6 单节点复制集?

在我的本地 Mac M1 PRO 上,我使用 Docker compose 来挂载基于 MongoDB 5 的单节点复制集已有几个月了。

version: "3.9"
services:
  mongodb:
    image: mongo:5
    command: --replSet rs0
    ports:
      - '28017:27017'
    healthcheck:
      test: echo 'db.runCommand("ping").ok' | mongo localhost:27017/admin --quiet
      interval: 2s
      timeout: 3s
      retries: 5

  mongo-init:
    image: mongo:5
    restart: "no"
    depends_on:
      mongodb:
        condition: service_healthy
    command: >
      mongo --host mongodb:27017 --eval
      '
      rs.initiate( {
        _id : "rs0",
        members: [
          { _id: 0, host: "localhost:27017" }
        ]
      })
      '
Run Code Online (Sandbox Code Playgroud)

它运行良好,我有一个简单的 MongoDB 5 复制集。现在,我希望 MongoDB 6 也能实现同样的效果。因此,我将映像从 mongodb:5 修改为 mongodb:6,但副本集未挂载。

我有这个错误: …

mongodb docker docker-compose

2
推荐指数
1
解决办法
4030
查看次数