据我所知,每个资源应该只有一个规范路径.因此,在下面的示例中,优秀的URL模式是什么?
以公司的休息代表为例.在这个假设的例子中,每个公司拥有 0个或更多部门,每个部门拥有 0个或更多员工.
没有关联公司,部门就不可能存在.
没有相关部门,员工就不能存在.
现在我会找到资源模式的自然表示.
/companies 一系列公司 - 接受新公司的接受.获取整个系列./companies/{companyId}一家公司.接受GET,PUT和DELETE/companies/{companyId}/departments接受新项目的POST.(在公司内部创建一个部门.)/companies/{companyId}/departments/{departmentId}//companies/{companyId}/departments/{departmentId}/employees/companies/{companyId}/departments/{departmentId}/employees/{empId}考虑到约束,在每个部分中,我觉得如果有点深度嵌套,这是有道理的.
但是,如果我想列出(GET)所有公司的所有员工,我的困难就来了.
最合适的资源模式将映射到/employees(所有员工的集合)
这是否意味着我应该/employees/{empId}也是因为如果是这样,那么有两个URI可以获得相同的资源?
或者整个架构可能会被展平,但这意味着员工是一个嵌套的顶级对象.
在基本级别,/employees/?company={companyId}&department={deptId}返回与最深层嵌套模式完全相同的员工视图.
URL模式的最佳实践是什么,其中资源由其他资源拥有但应该可以单独查询?
更新:请参阅下面的答案,看看我做了什么.
在一次简易PCI审计期间,审计员表示我们存在重大安全风险,因为
我个人认为这根本不是安全风险.图像css和javascript没有动态创建,它们不包含我们后端的数据,我们的客户详细信息和机制.
javascript中的注释只是简单地解释了javascript文件中的方法.哪个读JS的人都可以找到.
这如何显示" 信息泄露 "?
javascript中的评论是否真的存在安全隐患?
我知道,我有一个perm gen内存泄漏.使用jvisualvm进行性能分析表明,在进行热部署时(例如,在不杀死JVM的情况下停止和启动应用程序,在tomcat,WebSphere,WebLogic等中) - PermGen空间不断增加.
在阅读之后,使用jhat和其他高级工具,我意识到我可能WebAppClassLoader在其父类加载器中的某个类中引用了它.
即使我在jhat上做了一些基于JavaScript的大量查询,我也无法将其固定下来
是不是有一个简单的实用程序可以找出谁负责你的类加载器不被垃圾收集(从而允许垃圾收集由它加载的类)?
我试过JProfiler,jvisualvm,jhat和很多Google
所有LMGTFY的朋友 - 我花了大约一天半的阅读论坛一步一步的说明,没有运气.我正在寻找输出的实用程序或代码:
Y类的对象X是唯一的GC根,它可以防止您的类被删除.
这是一个交叉的帖子.我也向spring论坛发布了同样的问题.http://forum.springsource.org/showthread.php?128579-Database-driven-Controller-Mapping
嗨,我正在尝试进行数据库驱动的控制器映射,以便它们可以在运行时更改.
到目前为止,我所拥有的内容如下.
自定义处理程序适配器,以后可以随时进行优化.
@Component
public class DatabasePageUrlHandlerMapping extends AbstractUrlHandlerMapping implements PriorityOrdered {
@Override
protected Object getHandlerInternal(HttpServletRequest request)
throws Exception {
String lookupPath = getUrlPathHelper().getLookupPathForRequest(request);
List<Page> pages = Page.findAllPages();
for (Page page : pages) {
if (lookupPath.equals(page.getSeoPath())) {
Object handler = getApplicationContext().getBean("_pageViewController");
return new HandlerExecutionChain(handler);
}
}
return super.getHandlerInternal(request);
}
}
Run Code Online (Sandbox Code Playgroud)
我的webmvc-config看起来如下(相关部分)
码:
<context:component-scan base-package="com.artiststogether"
use-default-filters="false">
<context:include-filter expression="org.springframework.stereotype.Controller"
type="annotation" />
</context:component-scan>
<!-- If I don't put an order into this it doesn't fail over to …Run Code Online (Sandbox Code Playgroud) 在工作中,我们对具有以下结构的表进行了查询:
ip_from(number), ip_to(number), country, city, state, isp, latitude, longitude.
Run Code Online (Sandbox Code Playgroud)
该表有大约610万行.
要查找给定IP地址的详细信息,我们使用了如下查询:
SELECT *
FROM Ip2location
WHERE
:ip_num BETWEEN ip_from AND ip_to;
Run Code Online (Sandbox Code Playgroud)
在我们的开发数据库中的Oracle 10上,这需要大约17秒才能返回一行,具体取决于ip_num传入的内容.在我们更强大的实时系统上,它可能需要5-6秒,这实际上仍然太慢,我们需要通过后台作业选择此项.
不理想,特别是因为我们的实时系统真的需要ip细节.
索引的使用的类型是标准BTREE索引跨越两个ip_from和ip_to.我们研究了很多东西来尝试加快速度,例如范围分区.我们最终没有应用它,因为它需要Oracle Enterprise.我们还研究了增加表的并发性,但没有明显的效果.
无论如何,当我早上喝咖啡时,我意识到我认为可以通过运行以下查询来提高性能:(这是来自内存,可能会有一些错误.我们也选择了单个字段而不是所有内容)
SELECT *
FROM ip2location
WHERE
ip_from = (
SELECT max(ip_from)
FROM ip2location
WHERE ip_from <= :ip_num
)
AND
ip_to >= ip_num;
Run Code Online (Sandbox Code Playgroud)
这适用于我们的数据集,因为ip_from和之间没有重叠的范围ip_to.
然而,我没有准备好的是第二个查询的速度有多快.我们的开发数据库上的时间从17秒减少到0.007秒.
这对我来说没什么意义.我希望有一些性能提升,但不是那么多.数据库统计数据是否应该已经确定没有重叠并相应地进行优化?还有一种公认的更快捷方式来选择使用范围?
我的问题是:为什么即使使用子选择,第二个查询也要快得多?
我们希望购买通配符SSL证书,因为我们有很多子域名.但是我不知道Java是否信任通配符证书.当人们通过SSL连接到我们的API时,我们迫使我们与之通信的所有第三方将我们的SSL证书添加到他们的本地信任库中是不够的.
目前,我面临着从java受信任发行者购买通配符证书或每个子域购买多个证书的困境.
其他语言也有信任库吗?如果是这样,任何人都知道通配符证书是否也适用于它们.
我们的SVN存储库接近0.5 GB.我们的生产系统中的代码数量远远不够.
是否可以删除旧版本.我尝试svn dump了一个开始修订号,但无济于事.我无法将其导入干净的SVN存储库.
我们不需要超过一年的历史.
有任何想法吗?
嗨如何仅为H2 In Memory DB中的实例转储数据.
我现在有什么
PreparedStatement preparedStatement = connection
.prepareStatement("SCRIPT SIMPLE NOSETTINGS");
ResultSet resultSet = preparedStatement.executeQuery();
response.setContentType("text/plain");
ServletOutputStream out = response.getOutputStream();
while (resultSet.next()) {
String columnValue = resultSet.getString(1);
out.print(columnValue);
out.println();
Run Code Online (Sandbox Code Playgroud)
这会转储整个数据库结构,但不仅仅是插入数据.基本上我想要做的是备份我在开发模式期间插入的数据,以便下次启动数据库时我可以重新编写数据脚本.
表结构不是问题,因为它是由JPA完成的.
kotlin 中是否有任何方法可以对数据类值进行约束。我正在寻找类似于以下 java.lang.String 的内容。它不需要是非法参数异常,并且约束不一定在字符串字段上。
public class TotallyMadeUpClass{
private String username
public String getUsername(){ return this.username }
//Constrain the value somehow.
public void setUsername(String username) {
if (username.length > 10)
throw new IllegalArgumentException()
this.username = username}
}
Run Code Online (Sandbox Code Playgroud)
或者这个例子更接近我想要实现的目标。
public class TotallyMadeUpClass{
private final String username;
TotallyMadeUpClass(String username, OtherParams others){
if (username.length > 10)
throw new IllegalArgumentException()
this.username = username
}
public String getUsername(){ return this.username }
}
Run Code Online (Sandbox Code Playgroud) 我需要为经理ID取决于传递参数的所有员工返回字符串格式的员工姓名.当我编译该函数时,我得到一个错误.这是功能代码:
create or replace function Employee(v_manid IN employees.manager_id%type)
return varchar2
AS
cursor cur_emp is select last_name from employees where manager_id = v_manid;
v_names varchar2(10);
begin
for emp_rec in cur_emp
loop
v_name = v_name || emp_rec.last_name ||', ';
end loop;
return v_name
end;
/
Run Code Online (Sandbox Code Playgroud)
错误是:
错误(8,8):PLS-00103:遇到以下其中一项时遇到符号"=":: =.(@%;错误(8,44):PLS-00103:遇到以下其中一项时遇到符号";":),*& - +/at mod remaining rem和or ||
任何人都可以帮我这个吗?
使用 Flux 如何访问前一个元素?
我有一个外部事件流,它按顺序提供事件,该流的顺序是调度一个事件,然后立即调度另一个事件。然而,第二个事件的元数据位于第一个事件中。
请注意,事件数量并不总是偶数。
我想做的是将事件组合成事件流以供下游使用。
Flux#zip看起来很有希望,但这意味着返回外部事件类型的对象。
到目前为止我所拥有的是。
BinaryLogClient client = new BinaryLogClient(host, port, username, password);
Flux<Event> bridge = Flux.create(sink -> {
EventListener fluxListener = event -> {
sink.next(event);
};
client.registerEventListener(fluxListener);
});
bridge.subscribe(DemoApplication::printEvent);
bridge.map(new EventPairMemorizer());
public class EventPair {
private final Event previous;
private final Event current;
public EventPair(Event previous, Event current) {
this.previous = previous;
this.current = current;
}
/**
* @return `null` if no previous events.
*/
public Event getPrevious() {
return previous;
} …Run Code Online (Sandbox Code Playgroud) java ×5
api-design ×1
comments ×1
data-class ×1
disk ×1
function ×1
h2 ×1
javascript ×1
jdbc ×1
kotlin ×1
optimization ×1
oracle ×1
owasp ×1
path ×1
permgen ×1
plsql ×1
range ×1
rest ×1
security ×1
spring-mvc ×1
sql ×1
ssl ×1
svn ×1
validation ×1
wildcard ×1