我真的很喜欢SPQR轻松地将graphql与现有系统集成的方式,我唯一想看的是.graphqls文件,因此我可以在GraphQL语法上学习更多。
有没有一种方法可以从集成SPQR注释的现有代码中生成方案文件?
为了提供一些代码,让我们使用GitHub站点上的相同代码
实体:
public class User {
private String name;
private Integer id;
private Date registrationDate;
@GraphQLQuery(name = "name", description = "A person's name")
public String getName() {
return name;
}
@GraphQLQuery
public Integer getId() {
return id;
}
@GraphQLQuery(name = "regDate", description = "Date of registration")
public Date getRegistrationDate() {
return registrationDate;
}
}
Run Code Online (Sandbox Code Playgroud)
服务等级:
class UserService {
@GraphQLQuery(name = "user")
public User getById(@GraphQLArgument(name = "id") Integer id) {
...
}
} …Run Code Online (Sandbox Code Playgroud) 我有一个类似的界面:
public interface Getter {
Object get(Params params);
}
Run Code Online (Sandbox Code Playgroud)
我使用对不同方法的反射调用来实现:
public class GetterImpl implements Getter {
private final Object target;
private final Method method; //doStuff method
public GetterImpl(Object target, Method method) {
this.target = target;
this.method = method;
}
@Override
public Object get(Params params) {
//both the target and arguments depend on Params
return method.invoke(chooseTarget(params), prepareArgs(params));
}
private Object chooseTarget(Params params) {
if (params.getTargetOverride() != null) {
return params.getTargetOverride();
}
return target;
}
private Object[] prepareArgs(Params params) {
...
} …Run Code Online (Sandbox Code Playgroud) 我是Spring Boot + GraphQL的新手。我需要在我的控制器类中获取查询/更改操作名称。
目的:需要某些用户的特定突变/查询操作的最高权限。在这里,用户类型将作为请求标头传递并得到验证,并检查是否允许用户访问该操作。
@PostMapping
public ResponseEntity<Object> callGraphQLService(@RequestBody String query, @RequestHeader("user") String userName) {
ExecutionResult result = graphService.getGraphQL().execute(ExecutionInput.newExecutionInput()
.query(query)
.context(userName)
.build());
return new ResponseEntity<>(result, HttpStatus.OK);
}
Run Code Online (Sandbox Code Playgroud)
建议任何有效的机制来执行针对特定查询/突变的授权
我知道 aPublisher不能同时发布,但是如果我使用Flux#create(FluxSink),我可以安全地FluxSink#next同时调用吗?
换句话说,即使FluxSink#next并发调用,Spring 是否具有确保事件正确串行发布的内部魔法?
public class FluxTest {
private final Map<String, FluxSink<Item>> sinks = new ConcurrentHashMap<>();
// Store a new sink for the given ID
public void start(String id) {
Flux.create(sink -> sinks.put(id, sink));
}
// Called from different threads
public void publish(String id, Item item) {
sinks.get(id).next(item); //<----------- Is this safe??
}
}
Run Code Online (Sandbox Code Playgroud)
它的声音,我喜欢这一段的官方指南中指出,上述确实是安全的,但我不是在我的理解非常有信心。
create是一种更高级的 Flux 编程创建形式,适用于每轮多次发射,甚至来自多个线程。
我想MessageConverter在 Spring Boot 中注册一个自定义,让我更好地控制消息的转换方式。我有一个 Spring Boot 2.1.7 Webflux 应用程序。
我创建了我的自定义转换器:
public class CustomConverter extends MappingJackson2HttpMessageConverter {
...
}
Run Code Online (Sandbox Code Playgroud)
并将其注册为:
@Bean
public MappingJackson2HttpMessageConverter mappingJackson2HttpMessageConverter(ObjectMapper objectMapper) {
return new CustomConverter();
}
Run Code Online (Sandbox Code Playgroud)
我还确认它是通过自动装配注册的,HttpMessageConverters并确认它在转换器列表中。然后,我实现了一些方法,我期待着这样调用canRead,canWrite,readInternal,writeInternal他们并把断点。我的应用程序公开了一个 Rest 端点,该端点以 JSON 响应,并调用一个外部 Rest 服务,该服务发布 JSON 有效负载并接收 JSON 作为回报。
我在任何时候都看不到我的转换器正在被使用。我什至删除了所有其他转换器,只留下我自己的转换器,但仍然没有被调用。
我错过了什么吗?
我在Github上分叉了一个项目,做了一个提交,推到了我的分支并提出了拉取请求.一切都很好.
然后,我不断提交和推送不相关的东西,不知道所有这些都将被添加到我的拉取请求中.
我需要在我的fork中保存的更改(在不同的分支或其他内容中),但我必须从pull请求中删除除第一次提交之外的所有更改.我该怎么做呢?
java ×4
graphql-java ×2
byte-buddy ×1
bytecode ×1
concurrency ×1
git ×1
github ×1
graphql ×1
graphql-spqr ×1
pull-request ×1
spring ×1
spring-boot ×1