这是Spring MVC @PathVariable被截断的问题的延续
Spring论坛声明它已修复(3.2版本)作为ContentNegotiationManager的一部分.见下面的链接.
https://jira.springsource.org/browse/SPR-6164
https://jira.springsource.org/browse/SPR-7632
在我的应用程序中,带有.com的requestParameter被截断.
谁能解释我如何使用这个新功能?它是如何在xml中配置的?
在PHP中创建平面文件数据库结构的最佳实践是什么?
我看到很多比较成熟的PHP平面文件框架试图实现类似SQL的查询语法,这在大多数情况下都是我的目的(我只会在那时使用数据库).
是否有任何优雅的技巧,以获得良好的性能和功能与小代码开销?
我正在尝试生成一个简单的JSON响应.现在我得到406 Not Acceptable错误.Tomcat说:"此请求标识的资源只能根据请求"接受"标题生成具有不可接受特征的响应." 即使我的Accept标题是
Accept:text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Run Code Online (Sandbox Code Playgroud)
在tomcat/lib中,我有所有Tomcat jar,Spring jar和jackson-all-1.9.0.jar.我正在使用Spring 3.2.2和Tomcat 7.
我知道这个问题已经讨论了很多次,但没有一个解决方案适合我.
web.xml中
<web-app id="WebApp_ID" version="2.4"
xmlns="http://java.sun.com/xml/ns/j2ee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee
http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">
<display-name>Spring Web MVC Application</display-name>
<servlet>
<servlet-name>dispatcher</servlet-name>
<servlet-class>
org.springframework.web.servlet.DispatcherServlet
</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>dispatcher</servlet-name>
<url-pattern>*.htm</url-pattern>
</servlet-mapping>
</web-app>
Run Code Online (Sandbox Code Playgroud)
调度员servlet.xml中
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:mvc="http://www.springframework.org/schema/mvc"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-2.5.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-3.0.xsd
http://www.springframework.org/schema/mvc
http://www.springframework.org/schema/mvc/spring-mvc-3.0.xsd">
<bean id="viewResolver"
class="org.springframework.web.servlet.view.InternalResourceViewResolver" >
<property name="prefix">
<value>/WEB-INF/pages/</value>
</property>
<property name="suffix">
<value>.jsp</value>
</property>
</bean>
<context:component-scan base-package="com.smiechmateusz.controller" />
<context:annotation-config />
<mvc:annotation-driven />
</beans>
Run Code Online (Sandbox Code Playgroud)
HelloWorldController.java
package com.smiechmateusz.controller;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.springframework.stereotype.Controller;
import …Run Code Online (Sandbox Code Playgroud) 使用spring,使用以下代码:
List<HttpMessageConverter<?>> messageConverters = restTemplate.getMessageConverters();
for(HttpMessageConverter httpMessageConverter : messageConverters){
System.out.println(httpMessageConverter);
}
ResponseEntity<ProductList> productList = restTemplate.getForEntity(productDataUrl,ProductList.class);
Run Code Online (Sandbox Code Playgroud)
我明白了
org.springframework.http.converter.ByteArrayHttpMessageConverter@34649ee4
org.springframework.http.converter.StringHttpMessageConverter@39fba59b
org.springframework.http.converter.ResourceHttpMessageConverter@383580da
org.springframework.http.converter.xml.SourceHttpMessageConverter@409e850a
org.springframework.http.converter.support.AllEncompassingFormHttpMessageConverter@673074aa
org.springframework.http.converter.xml.Jaxb2RootElementHttpMessageConverter@1e3b79d3
org.springframework.http.converter.json.MappingJackson2HttpMessageConverter@52bb1b26
org.springframework.web.client.RestClientException: Could not extract response: no suitable HttpMessageConverter found for response type [class com.mycopmany.ProductList] and content type [text/html;charset=UTF-8]
Run Code Online (Sandbox Code Playgroud)
pojo的片段:
@XmlRootElement(name="TheProductList")
public class ProductList {
@XmlElement(required = true, name = "date")
private LocalDate importDate;
Run Code Online (Sandbox Code Playgroud) 在我的pom.xml中有以下详细信息
<dependency>
<groupId>org.codehaus.jackson</groupId>
<artifactId>jackson-core-asl</artifactId>
<version>1.9.13</version>
</dependency>
<dependency>
<groupId>org.codehaus.jackson</groupId>
<artifactId>jackson-mapper-asl</artifactId>
<version>1.9.13</version>
</dependency>
<dependency>
<groupId>org.apache.httpcomponents</groupId>
<artifactId>httpclient</artifactId>
<version>4.1.1</version>
</dependency>
<dependency>
<groupId>org.apache.tiles</groupId>
<artifactId>tiles-extras</artifactId>
<version>3.0.5</version>
</dependency>
<dependency>
<groupId>org.apache.tiles</groupId>
<artifactId>tiles-core</artifactId>
<version>3.0.5</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>${spring-framework.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-web</artifactId>
<version>4.1.1.RELEASE</version>
</dependency>
<dependency>
<groupId>com.googlecode.json-simple</groupId>
<artifactId>json-simple</artifactId>
<version>1.1</version>
</dependency>
Run Code Online (Sandbox Code Playgroud)
应用-config.xml文件:
<context:component-scan base-package="com.test" />
<mvc:annotation-driven />
<!-- <mvc:default-servlet-handler /> -->
<mvc:resources mapping="/resources/**" location="/resources/" />
Run Code Online (Sandbox Code Playgroud)
JSP页面:
<form:form method="POST" action="/QuickBooks-UX/syncAccounts">
<input type="submit" value="Sync Account"/>
</form:form>
Run Code Online (Sandbox Code Playgroud)
控制器:
@Controller
@RequestMapping("/")
public class QuickBooksController {
@RequestMapping(value = "/quickBooks", method = RequestMethod.GET)
public String qucikBooks(ModelMap …Run Code Online (Sandbox Code Playgroud) 我正在使用springMVC,并且在尝试进行更新时遇到异常.
10:10:49,847 DEBUG LogicalConnectionImpl:250 - Released JDBC connection
10:10:49,859 DEBUG FixedContentNegotiationStrategy:48 - Requested media types is text/html (based on default MediaType)
10:10:49,929 DEBUG ExceptionHandlerExceptionResolver:132 - Resolving exception from handler [public com.model.JobQueue com.controller.TestResultController.updateJob(java.lang.String,java.lang.String,java.lang.String)]: org.springframework.web.HttpMediaTypeNotAcceptableException: Could not find acceptable representation
10:10:49,937 DEBUG ResponseStatusExceptionResolver:132 - Resolving exception from handler [public com.model.JobQueue com.controller.TestResultController.updateJob(java.lang.String,java.lang.String,java.lang.String)]: org.springframework.web.HttpMediaTypeNotAcceptableException: Could not find acceptable representation
10:10:49,938 DEBUG DefaultHandlerExceptionResolver:132 - Resolving exception from handler [public com.model.JobQueue com.controller.TestResultController.updateJob(java.lang.String,java.lang.String,java.lang.String)]: org.springframework.web.HttpMediaTypeNotAcceptableException: Could not find acceptable representation
10:10:49,940 DEBUG DispatcherServlet:999 - Null ModelAndView returned to …Run Code Online (Sandbox Code Playgroud) 我尝试在发送 GET 请求时返回 JSONObject。
方法
@RequestMapping(value = "/{businessId}/{orderId}/{reportId}", method = RequestMethod.GET,
produces = MediaType.APPLICATION_JSON_VALUE)
@ResponseBody
public ResponseEntity<JSONObject> getReport(@PathVariable("businessId") String businessId,
@PathVariable("orderId") String orderId,
@PathVariable("reportId") Long reportId) throws JSONException {
return new ResponseEntity<JSONObject>(reportService.getReportJSON(), HttpStatus.OK);
}
Run Code Online (Sandbox Code Playgroud)
我从文件中获取 json。这是一个单一的 json 对象。在一行。我像这样将它解析为 JSONObject
fs = FileSystem.get(uri, conf);
BufferedReader reader = null;
reader = new BufferedReader(new InputStreamReader(fs.open(path)));
line = reader.readLine();
while (line != null) {
jsonObjectList = new JSONObject(line);
line = reader.readLine();
}
return jsonObjectList;
Run Code Online (Sandbox Code Playgroud)
这就是我的文件的样子。
{"reportId":"1","description":"????????????????????????","orderId":"357","businessId":"??????????1","tables":[{"name":"???????","fields":[{"name":"0-17","type":"number"},{"name":"18-24","type":"number"},{"name":"25-34","type":"number"},{"name":"35-44","type":"number"},{"name":"45-54","type":"number"},{"name":"45-54","type":"number"},{"name":"45-54","type":"number"}],"data":[2571,5287,4587,7705,3675,3743,7423]},{"name":"???????","fields":[{"name":"0-17","type":"number"},{"name":"18-24","type":"number"},{"name":"25-34","type":"number"},{"name":"35-44","type":"number"},{"name":"45-54","type":"number"},{"name":"45-54","type":"number"},{"name":"45-54","type":"number"}],"data":[7552,3107,6477,4967,9106,7859,9060]},{"name":"???????????????","fields":[{"name":"0-17","type":"number"},{"name":"18-24","type":"number"},{"name":"25-34","type":"number"},{"name":"35-44","type":"number"},{"name":"45-54","type":"number"},{"name":"45-54","type":"number"},{"name":"45-54","type":"number"}],"data":[7552,3107,6477,4967,9106,7859,9060]}]}
Run Code Online (Sandbox Code Playgroud)
我使用邮递员来检查我的方法。这是我得到的错误
{
"timestamp": 1504020107350,
"status": 406,
"error": "Not …Run Code Online (Sandbox Code Playgroud) 所以我很难在json中编写我的bean ...首先我尝试使用codehaus'jackson 1.9.13和Spring MVC 3.1.1.我遇到了一些问题,直到我设法达到"直接自我引用"异常.看着这个我发现我需要更快的xml的杰克逊2.然后我发现(这里)我需要Spring 3.1.2因为之前的版本不支持Jackson 2.
所以,毕竟这......我仍然得到同样的例外.我的maven依赖确实包括Spring MVC 3.1.2发行版以及Jackson的2个jar(它们都在我的构建路径中)
<!-- Jackson JSON -->
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.2.2</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-annotations</artifactId>
<version>2.2.2</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-core</artifactId>
<version>2.2.2</version>
</dependency>
Run Code Online (Sandbox Code Playgroud)
这是我的控制器方法试图发送一个bean:
@RequestMapping(value = "/WS/{id}")
public @ResponseBody Resource displayWS(@PathVariable final int id) {
return this.service.findById(id);
}
Run Code Online (Sandbox Code Playgroud)
这是我在通话后在浏览器中收到的内容:
HTTP Status 406
The resource identified by this request is only capable of generating responses with characteristics not acceptable according to the request "accept" headers ().
Run Code Online (Sandbox Code Playgroud)
这是服务器日志(JBoss 7.1.1):
12:10:59,691 TRACE [org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod] (http-localhost-127.0.0.1-8080-1) Error …Run Code Online (Sandbox Code Playgroud) spring ×6
json ×4
spring-mvc ×4
java ×3
database ×1
flat-file ×1
jackson ×1
jaxb ×1
media-type ×1
php ×1
rest ×1
sql ×1
web-services ×1
xml ×1