小编Ada*_*zek的帖子

如何为非CRUD"命令"设计REST API,如激活和停用资源?

在我决定提出这个问题之前,我已经搜索了很长时间才得到答案,但我没有找到任何令人满意的答案.(例如,最好的SOAP/REST/RPC Web API的示例?为什么你喜欢它们?它们有什么问题?)

问题实际上很简单.我有一个名为Account的对象/资源.我的REST API支持所有带有GET,POST,PUT和DELETE的CRUD,并且具有正确的错误处理,状态代码等.

另外,我想公开一个API("命令")来激活和停用所选的帐户资源.即使"isActive"是帐户的属性,我也不想仅使用整个帐户的CRUD更新.

我知道很容易违反REST原则并使用如下设计进行RPC样式设计:

PUT/api/account /:accountId/activate

PUT/api/account /:accountId/deactivate

那么这个用例的最佳解决方案是什么?

我目前的想法是使用像这样的PUT和DELETE动词(将其视为子资源),如http://www.vinaysahni.com/best-practices-for-a-pragmatic-restful-api#restful:

PUT/api/account /:accountId/isActive //用于激活

DELETE/api/account /:accountId/isActive //用于停用

你有什么解决方案?

rest

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

Spring Security和OpenID Connect(OIDC)

在我目前的项目中,我在一个完整的范围内使用Spring Security OAuth(http://projects.spring.io/spring-security-oauth/)项目来保护我们的资源(Web API).到目前为止一切正常.

我现在正在开发客户端,我正在寻找对身份验证方案的良好支持(因为OAuth是一种授权协议).经过漫长的互联网搜索,我很确定我应该采用OpenID Connect(http://openid.net/connect/)来满足这一要求,因为它是"OAuth 2.0之上的简单身份层"(I但是,知道在安全主题的情况下没有"简单").

可悲但真实的我在Spring Security中找不到任何有关OpenID Connect支持的好资源(不要与"纯"OpenID混淆).在https://github.com/mitreid-connect/OpenID-Connect-Java-Spring-Server上有一个OpenID Connect参考实现,但是我已经期望在Spring Security中直接提供类似的东西以及全面的文档等等.我在这里找到了大约2年的关于它的讨论https://github.com/spring-projects/spring-security-oauth/issues/220但目前的状态是什么?寻找"OpenID Connect的Spring Security支持"并没有带来任何"切实"的结果.

在Spring Security的帮助下,您是否有关于实施OpenID Connect的任何信息,文档和/或经验?

spring oauth spring-security openid-connect

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

在IntelliJ的2016.3 JavaScript项目中,"未定义项目jdk"

更新到IntelliJ IDEA 2016.3后,我收到警告:"项目jdk未定义"在JavaScript/Node/React项目中.我监督过什么吗?怎么解决?在"设置JDK"链接下,我找不到任何适合的注释.

javascript configuration intellij-idea

11
推荐指数
1
解决办法
2734
查看次数

在没有注入$ rootScope的情况下对指令中的角度事件做出反应

我想知道你是否有一个指令代码的例子,它对角度事件做出反应,比如$routeChangeError没有注入$rootScope它(用于$on链接函数).它打破了我的观点MV*模式和"产生"气味代码(给出了在指令中操纵根范围的可能性).提前致谢.

javascript angularjs angularjs-directive angularjs-scope

8
推荐指数
3
解决办法
2万
查看次数

IntelliJ 13.1 angularjs插件不起作用

我刚刚将IntelliJ升级到13.1.与angularjs插头一起使用.我的问题是IDE不再识别角度指令只是说"未知的html标签".我错过了什么吗?

intellij-idea angularjs

8
推荐指数
2
解决办法
4677
查看次数

instanceof如何在JavaScript中运行?

在下面的代码示例中,最后使用instanceof检查obj2和obj3,即使构造的方式不同并且返回name属性的结果不同,也会返回true .

var Obj1 = function() {
    this.name = "foo1";
};
Obj1.prototype.name = "foo1onProt";
var obj1 = new Obj1();

var Obj2 = function() {};
Obj2.prototype = new Obj1();
Obj2.prototype.constructor = Obj2;
var obj2 = new Obj2();

var Obj3 = function() {};
Obj3.prototype = Object.create(Obj1.prototype);
Obj3.prototype.constructor = Obj3;
var obj3 = new Obj3();

console.dir(obj1);
console.log("obj1.name: " + obj1.name);

console.dir(obj2);
console.log("obj2.name: " + obj2.name);

console.dir(obj3);
console.log("obj3.name: " + obj3.name);

console.log("obj2 instanceof Obj1: " + (obj2 instanceof Obj1));
console.log("obj3 …
Run Code Online (Sandbox Code Playgroud)

javascript

8
推荐指数
1
解决办法
2890
查看次数

在JavaScript中全局范围内存在未定义变量的原因是什么?

我发现很多关于未定义的讨论作为价值,例如如何检查是否相等等.但是,作为全局变量存在未定义的"工程"原因是什么?对面没有变量...

console.log(undefined in this);  // logs true
console.log(null in this);  // logs false
Run Code Online (Sandbox Code Playgroud)

javascript undefined

7
推荐指数
1
解决办法
208
查看次数

Git Merge冲突文件不存在

你能帮我理解一下这个行为:

在分支开发上我有一个包含两个提交的文件:

BOCZA2@PC45819 MINGW64 /c/nttcloud/gitlab/coba/ZAA (develop)
$ git log --oneline -- coba.zaa.model/coba.zaa.model.config/src/main/java/com/zaa/model/config/Channel.java                      
8509cdf Added route generator based on freemarker template
1e890b7 Added XML configuration for test objects in StaticDataInitializer
Run Code Online (Sandbox Code Playgroud)

然后我可以切换到我的功能分支:

BOCZA2@PC45819 MINGW64 /c/nttcloud/gitlab/coba/ZAA (develop)
$ git checkout feature/ZAA_tools_xmlgenerator
Switched to branch 'feature/ZAA_tools_xmlgenerator'
Your branch is up-to-date with 'origin/feature/ZAA_tools_xmlgenerator'.
Run Code Online (Sandbox Code Playgroud)

并检查我没有提交该文件:

BOCZA2@PC45819 MINGW64 /c/nttcloud/gitlab/coba/ZAA (feature/ZAA_tools_xmlgenerator)
$ git log --oneline -- coba.zaa.model/coba.zaa.model.config/src/main/java/com/zaa/model/config/Channel.java
Run Code Online (Sandbox Code Playgroud)

该文件在工作目录中也不存在:

BOCZA2@PC45819 MINGW64 /c/nttcloud/gitlab/coba/ZAA (feature/ZAA_tools_xmlgenerator)
$ cat  coba.zaa.model/coba.zaa.model.config/src/main/java/com/zaa/model/config/Channel.java
cat: coba.zaa.model/coba.zaa.model.config/src/main/java/com/zaa/model/config/Channel.java: No such file or directory
Run Code Online (Sandbox Code Playgroud)

但是当我尝试将develop合并到我的功能分支时:

BOCZA2@PC45819 MINGW64 /c/nttcloud/gitlab/coba/ZAA (feature/ZAA_tools_xmlgenerator)
$ …
Run Code Online (Sandbox Code Playgroud)

git merge

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

Spring @PostConstruct取决于@Profile

我想在一个配置类中有多个@PostConstruct注释方法,应该根据@Profile调用它们.您可以想象一个代码剪切如下:

@Configuration
public class SilentaConfiguration {

    private static final Logger LOG = LoggerFactory.getLogger(SilentaConfiguration.class);

    @Autowired
    private Environment env;

    @PostConstruct @Profile("test")
    public void logImportantInfomationForTest() {
        LOG.info("********** logImportantInfomationForTest");
    }

    @PostConstruct @Profile("development")
    public void logImportantInfomationForDevelopment() {
        LOG.info("********** logImportantInfomationForDevelopment");
    }   
}
Run Code Online (Sandbox Code Playgroud)

但是根据@PostConstruct的javadoc,我只能有一个用这个注释注释的方法.在Spring的Jira https://jira.spring.io/browse/SPR-12433中有一个开放的改进.

你是如何解决这个要求的?我总是可以将这个配置类拆分成多个类,但也许你有更好的想法/解决方案.

BTW.上面的代码运行没有问题,但无论配置文件设置如何,都会调用这两种方法.

java configuration spring postconstruct

5
推荐指数
2
解决办法
4388
查看次数

使用 Spring Boot 1.4 导入 get()、status() 和 content() 的 MVC 测试

这篇博客描述了 Spring Boot 1.4 中的一些测试改进。不幸的是,似乎缺少一些重要信息。什么静态导入需要使用的方法get()status()content()从下面的例子吗?

@RunWith(SpringRunner.class)
@WebMvcTest(UserVehicleController.class)
public class UserVehicleControllerTests {

    @Autowired
    private MockMvc mvc;

    @MockBean
    private UserVehicleService userVehicleService;

    @Test
    public void getVehicleShouldReturnMakeAndModel() {
        given(this.userVehicleService.getVehicleDetails("sboot"))
            .willReturn(new VehicleDetails("Honda", "Civic"));

        this.mvc.perform(get("/sboot/vehicle")
            .accept(MediaType.TEXT_PLAIN))
            .andExpect(status().isOk())
            .andExpect(content().string("Honda Civic"));
    }
}
Run Code Online (Sandbox Code Playgroud)

testing spring unit-testing spring-mvc spring-boot

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