小编duk*_*ble的帖子

在使用nodejs和express创建的REST API中设置响应状态和JSON内容的正确方法

我正在玩Nodejs并通过构建一个小的rest API来表达.我的问题是,设置代码状态的好方法/最佳方法是什么,以及响应数据?

让我解释一下代码(我不会把节点和快速代码放到启动服务器,只关注路由器方法):

router.get('/users/:id', function(req, res, next) {
  var user = users.getUserById(req.params.id);
  res.json(user);
});


exports.getUserById = function(id) {
  for (var i = 0; i < users.length; i++) {
    if (users[i].id == id) return users[i];
  }
};
Run Code Online (Sandbox Code Playgroud)

下面的代码工作正常,当使用Postman发送请求时,我得到以下结果: 在此输入图像描述

如您所见,状态显示200,即可.但这是最好的方法吗?有没有我应该自己设置状态,以及返回的JSON?或者总是由快递处理?

例如,我刚刚进行了快速测试并略微修改了上面的get方法:

router.get('/users/:id', function(req, res, next) {
  var user = users.getUserById(req.params.id);
  if (user == null || user == 'undefined') {
    res.status(404);
  }
  res.json(user);
});
Run Code Online (Sandbox Code Playgroud)

如您所见,如果在阵列中找不到用户,我将只设置404状态.

有关此主题的更多信息的资源/建议非常受欢迎.

rest http node.js express

162
推荐指数
6
解决办法
23万
查看次数

数据库分区 - 水平与垂直 - 规范化和行分裂之间的区别?

我试图掌握数据库分区的不同概念,这就是我对它的理解:

水平分区/分片:将表拆分到不同的表中,该表将包含初始表中的行的子集(如果按大陆分割Users表,我已经看到了很多示例,如北美的子表,另一个为欧洲等...).每个分区位于不同的物理位置(了解"机器").据我所知,水平分区和分片是完全相同的(?).

垂直分区:根据我的理解(http://technet.microsoft.com/en-us/library/ms178148%28v=sql.105%29.aspx),有两种垂直分区:

  • 规范化(包括通过拆分表并使用外键链接来从数据库中删除冗余).

  • Row Splitting,这是我不明白的,NormalizationRow Splitting有什么区别?那两种技术在哪些方面有所不同?

我还读过这篇文章(数据库水平和垂直缩放之间的差异),水平分区和垂直分区之间的区别在于,您通过添加更多机器来扩展第一个,而在第二个中您通过添加更多功率进行扩展( CPU,RAM)到你现有的机器,是一个正确的定义?我认为这两种技术之间的核心区别在于您分割表格的方式.

对于大量问题我很抱歉,但是我有点困惑,因为我遇到的很多不同的网站都说不同的东西.

任何帮助澄清将不胜感激.任何带有几个表格的简单演示的链接也会非常有用.

database database-design sharding database-performance database-partitioning

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

Spring Security - 在应用程序上下文中找不到可见的WebSecurityExpressionHandler实例

仅当用户通过身份验证时,我才在JSP页面中显示注销链接时遇到问题.以下是我在JSP页面这一行的例外情况:

<sec:authorize access="isAuthenticated()">
Run Code Online (Sandbox Code Playgroud)

例外:

Stacktrace:
....

root cause

javax.servlet.jsp.JspException: No visible WebSecurityExpressionHandler instance could be found in the application context. There must be at least one in order to support expressions in JSP 'authorize' tags.
    org.springframework.security.taglibs.authz.AuthorizeTag.getExpressionHandler(AuthorizeTag.java:100)
    org.springframework.security.taglibs.authz.AuthorizeTag.authorizeUsingAccessExpression(AuthorizeTag.java:58)
Run Code Online (Sandbox Code Playgroud)

这是我的application-context-Security.xml:

<http auto-config='true' >
    <intercept-url pattern="/user/**" access="ROLE_User" />
    <logout logout-success-url="/hello.htm" />
</http>

<beans:bean id="daoAuthenticationProvider"
    class="org.springframework.security.authentication.dao.DaoAuthenticationProvider">
    <beans:property name="userDetailsService" ref="userDetailsService" />
</beans:bean>

<beans:bean id="authenticationManager"
    class="org.springframework.security.authentication.ProviderManager">
    <beans:property name="providers">
        <beans:list>
            <beans:ref local="daoAuthenticationProvider" />
        </beans:list>
    </beans:property>
</beans:bean>

<authentication-manager>
    <authentication-provider user-service-ref="userDetailsService">
        <password-encoder hash="plaintext" />
    </authentication-provider>
</authentication-manager>
Run Code Online (Sandbox Code Playgroud)

我知道我可以在http标签中使用use-expression ="true",但这意味着我必须在intercept-url标签和java代码中使用表达式.有解决方法吗?

spring spring-security

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

如何在java中使用HttpGet在REST调用中传递空格

我正在使用他们的REST API向SMS网关发送呼叫.当我发送一个简单的单词如'Hello'时,一切都很好,但是如果我添加一个空格,那么我遇到了麻烦.这是因为URI不能包含空格.

做我需要做的事情的正确方法是什么?

HttpClient httpclient = new DefaultHttpClient();
try {
    HttpGet httpget = new HttpGet("http://www.example.com/SecureREST/SimpleSMSsend?PhoneNumber=123&Message=hello how are you?");
httpget.addHeader(new BasicHeader("Accept", "application/json"));

// Create a response handler
ResponseHandler<String> responseHandler = new BasicResponseHandler();
String responseBody = httpclient.execute(httpget, responseHandler);
System.out.println("----------------------------------------");
System.out.println(responseBody);
System.out.println("----------------------------------------");
} finally {
httpclient.getConnectionManager().shutdown();
}
Run Code Online (Sandbox Code Playgroud)

导致IllegalArgumentException:

Exception in thread "main" java.lang.IllegalArgumentException
at java.net.URI.create(Unknown Source)
at org.apache.http.client.methods.HttpGet.<init>(HttpGet.java:69)
at main.main(main.java:36)
Caused by: java.net.URISyntaxException: Illegal character in query at index 97: https://www.example.com/SecureREST/SimpleSMSsend?PhoneNumber=123&Message=Hello, how are you?
at java.net.URI$Parser.fail(Unknown Source)
at java.net.URI$Parser.checkChars(Unknown Source)
at java.net.URI$Parser.parseHierarchical(Unknown Source) …
Run Code Online (Sandbox Code Playgroud)

java https sms uri sms-gateway

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

在Spring MVC和Hibernate应用程序中的JSP页面中实现分页

我正在尝试在我的JSP页面中实现分页.我正在使用Spring MVC和Hibernate.java代码部分没问题但我在JSP页面中实现它有困难.我正在使用twitter bootstrap.

这是我到目前为止所做的事情:

<div class="container">
    <table class="table table-hover">
        <th>First Name</th>
        <th>Last Name</th>
        <th>Age</th>
        <c:forEach items="${employees}" var="emp">
        <tr>
            <td>${emp.firstName}</td>
            <td>${emp.lastName}</td>
            <td>${emp.Age}</td>
        </tr>
        </c:forEach>
    </table>

    <div class="pagination">
        <ul>
            <li class="disabled"><a href="#">First</a></li>
            <li class="disabled"><a href="#">Prev</a></li>
            <li class="active"><a href="#">1</a></li>
            <li class="active"><a href="#">2</a></li>
            <li class="active"><a href="#">3</a></li>
            <li class="active"><a href="#">4</a></li>
            <li class="active"><a href="#">5</a></li>
            <li class="active"><a href="#">Next</a></li>
            <li class="active"><a href="#">Last</a></li>
        </ul>
    </div>
</div>
Run Code Online (Sandbox Code Playgroud)

这是我的控制器中的相关代码:

@RequestMapping(value = "/list", method = RequestMethod.GET)
    public String getEmployees(ModelMap model) {
            **//I believe I should get the page number from the JSP …
Run Code Online (Sandbox Code Playgroud)

spring jsp hibernate spring-mvc twitter-bootstrap

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

发送到HTTPS网址的java请求是否完全安全?

我实际上是尝试使用CDYNE及其API发送短信.为此,我使用Java和HttpGet和HttpClient对象(Httpcore和HttpClient库).我将请求发送到https URL,发送参数如https://www.example.com/SecureREST/SimpleSMSsend?PhoneNumber=ABC&Message=XYZ

我正在使用GET请求并且所有参数都在URL中,这是一个安全问题吗?如果URL中的Message参数的内容包含敏感信息,该怎么办?有人可以嗅探网络以获取内容,或者是否安全,因为请求是使用HTTPS发送的?

我相信只有www.example.com在握手过程中是可见的,一旦完成,一切都是加密的,但我只是想确定.

java https sms sms-gateway

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

使用Maven的简单Spring MVC Hibernate项目

我一直在尝试遵循这个教程:http://viralpatel.net/blogs/2010/11/spring3-mvc-hibernate-maven-tutorial-eclipse-example.html

我没有使用本教程遇到任何问题,但我的问题是:如何创建一个战争,以便我可以在tomcat中部署应用程序?

编辑:我已经能够创建战争并部署它但现在尝试访问localhost时:8080/MavenWeb我有一个404页面.

战争是正确构建的,它的名称是MavenWeb.war,如pom.xml文件中的finalName标记所指定.

以下是部署时tomcat的日志:

May 27, 2012 9:32:14 PM org.apache.catalina.core.AprLifecycleListener init
INFO: The APR based Apache Tomcat Native library which allows optimal performance in production environments was not found on the java.library.path: C:\Program Files\Java\jdk1.7.0_04\bin;C:\Windows\Sun\Java\bin;C:\Windows\system32;C:\Windows;C:\Program Files (x86)\NVIDIA Corporation\PhysX\Common;C:\Windows\system32;C:\Windows;C:\Windows\System32\Wbem;C:\Windows\System32\WindowsPowerShell\v1.0\;C:\Program Files\Java\jdk1.7.0_04\;C:\apache-tomcat-7.0.27\lib;C:\apache-maven-3.0.4\bin;C:\Program Files\Java\jdk1.7.0_04\\bin;C:\apache-tomcat-7.0.27\lib;.
May 27, 2012 9:32:14 PM org.apache.coyote.AbstractProtocol init
INFO: Initializing ProtocolHandler ["http-bio-8080"]
May 27, 2012 9:32:14 PM org.apache.coyote.AbstractProtocol init
INFO: Initializing ProtocolHandler ["ajp-bio-8009"]
May 27, 2012 9:32:14 PM org.apache.catalina.startup.Catalina load
INFO: Initialization processed in 523 ms
May 27, …
Run Code Online (Sandbox Code Playgroud)

java model-view-controller spring tomcat maven

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

Spring - 构建路径不完整.在dispatcher-servlet.xml中找不到org/springframework/beans/factory/Aware的类文件

我安装了Spring Tool Suite,现在将它用于一个小样本项目.但是我的dispatcher-servlet.xml文件中出现错误:

Build path is incomplete. Cannot find class file for org/springframework/beans/factory/Aware
Run Code Online (Sandbox Code Playgroud)

此处突出显示此错误:

<bean
    **class="org.springframework.web.servlet.view.InternalResourceViewResolver">**
    <property name="prefix">
        <value>/WEB-INF/pages/</value>
    </property>
    <property name="suffix">
        <value>.jsp</value>
    </property>
</bean>
Run Code Online (Sandbox Code Playgroud)

任何想法?

java spring

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

如何使用Node.js和Express在REST API中实现搜索和过滤

我正在通过构建REST API学习和使用Node and Express。我没有任何数据库可以存储数据,我可以在内存中进行所有操作。

假设我有很多用户:

var users = [{"id": "1", "firstName": "John", "lastName": "Doe"}];
Run Code Online (Sandbox Code Playgroud)

并定义了一个getAllUser函数:

exports.getAllUser = function(page, items) {
  page = (page < 1 ? 1 : page) || 1;
  items = (items < 1 ? 5 : items) || 5;
  var indexStart, indexEnd;
  indexStart = (page - 1) * items;
  indexEnd = indexStart + items;
  return users.slice(indexStart, indexEnd);
};
Run Code Online (Sandbox Code Playgroud)

并定义一条路线:

router.get('/users', function(req, res, next) {
  var page = req.query.page;
      items = req.query.items;
  page = page !== 'undefined' ? …
Run Code Online (Sandbox Code Playgroud)

api rest node.js express

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

使用JAVA的JSONObject中的参数数组

我试图有这个确切的JSON语法,但无法达到它:

{
    "sun":"yellow",
    "vegetables":[{
        "apple":"red",
        "banana":"yellow",
        "melon":"orange"
    }]
}
Run Code Online (Sandbox Code Playgroud)

我能得到的最接近的是:

{
    "sun":"yellow",
    "vegetables":["{
        "apple":"red",
        "banana":"yellow",
        "melon":"orange"
    "]}
}
Run Code Online (Sandbox Code Playgroud)

这就是我在做的事情:

JSONObject json = new JSONObject();
json.put("sun","yellow");

ArrayList<HashMap<String,Object>> test = new ArrayList<HashMap<String,Object>>();
HashMap<String,Object> params = new HashMap<String, Object>();
params.put("apple","red");
params.put("banana","yellow");
params.put("melon","orange");

test.add(params);
json.put("fruits",test);
Run Code Online (Sandbox Code Playgroud)

我无法理解,我错过了什么?

java json

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

如何使用Spring MVC和注释删除记录

我是Spring的新手,我正在努力完成以下任务:

假设我在数据库表中有一个包含2列"id"和"name"的水果列表.我想有一个显示列表的页面,每个水果旁边都有一个"删除"按钮.我认为这很容易实现,但我无法弄明白,也找不到任何解释这个的教程.

这就是我现在所拥有的:

视图:

<c:forEach items="${fruits}" var="fruit">
    <tr>
        <td><c:out value="${fruit.name}" /></td>
        <sec:authorize access="hasRole('admin')">
            <td>
                <a href="<c:url var="deleteUrl" value="/fruit/remove.html"/>">DELETE</a>
                <form id="${fruitFormId}" method="POST">
                    <input id="fruit" name="fruit" type="hidden" value="${fruit.id}"/>
                </form>
            </td>
        </sec:authorize>
    </tr>
</c:forEach>
Run Code Online (Sandbox Code Playgroud)

然后控制器:

@Controller
public class FruitController{

    @Autowired
    private FruitManager fruitManager;

    @RequestMapping(value = "/list", method = RequestMethod.GET)
    public String getFruits(ModelMap model) {
        model.addAttribute("fruits", this.fruitManager.getFruits());
        return "list";
    }

    @RequestMapping(value = "/fruit/remove", method = RequestMethod.POST)
    public String removeAd(Fruit fruit) {
        fruitManager.removeFruit(fruit);
        return "/list";
    }
Run Code Online (Sandbox Code Playgroud)

我甚至不确定我现在正在使用"良好和干净"的方式,并希望按照惯例(如果有的话)完成这种"正确的方式".

spring spring-mvc

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