我们正在评估用于基于 Web 的应用程序的技术,并且一些建议与基于 RESTful 的服务方法一起使用。技术栈
1)Spring 2)Apache CXF(JAX-RS)
我的问题是
1) 如何在请求之间管理状态。例如,用户已通过身份验证,现在他正在发出一系列请求,比如浏览分页报告。我想这个网址会像
domain.com/reports/customreport/page/1 domain.com/reports/customreport/page/2 等...
a) 用户信息和请求参数存储在哪里,以便可以在请求之间共享。b) 假设结果正在流式传输,Rowset 存储在哪里?
是否有类似于 Petclinic 的完整示例应用程序,可以为此类应用程序提供最佳实践。
如何在 Excel 文件中正确生成支持中文字符编码的“javax.ws.rs.core.Response”(待返回)?
为了澄清,我有一个包含一些中文内容的文件(CSV excel),我需要返回一个 javax 响应,然后正确显示文档中的中文字符(在客户端)。
目前我正在做以下事情:
return Response.status( 200 )
.header( "content-disposition",
"attachment;filename=SampleCSV.csv;charset=Unicode" )
.entity( result )
.build();
Run Code Online (Sandbox Code Playgroud)
但是当这个响应被构建并返回到客户端时(并显示一个要求下载文件的弹出屏幕),excel文件的中文内容被狼吞虎咽。
任何建议将不胜感激。
我正在尝试使用一个简单的 JAX RS 示例,但我没有这样做。
网页.xml
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:jsp="http://java.sun.com/xml/ns/javaee/jsp" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" id="WebApp_ID" version="3.0">
<display-name>PLAYGROUND</display-name>
<servlet-mapping>
<servlet-name>playground.Rest</servlet-name>
<url-pattern>/api/*</url-pattern>
</servlet-mapping>
</web-app>
Run Code Online (Sandbox Code Playgroud)
REST.java
package playground;
import javax.ws.rs.GET;
import javax.ws.rs.Path;
import javax.ws.rs.core.Application;
public class Rest extends Application {
@GET
@Path("hello")
public String helloworld() {
return "Hello World!";
}
}
Run Code Online (Sandbox Code Playgroud)
http://localhost/{warcontext}/api/hello使用浏览器 (GET)访问给我 404 错误状态
这可能是非常愚蠢的事情,但我无法弄清楚。
使用:JBoss EAP 6.1.0 (Java EE 6)
我正在尝试使用 jquery ajax 发送附加到 FormData 的文件。在参考了一些 mozilla 和 IBM 的文档后,我想出了以下内容。
阿贾克斯代码:
var sessionId = $.cookie("referenceId");
var myFormData = { sessionId: sessionId,
cipherData: cipherData, // Encrypted xml data
payslip: document.getElementById('payslip').files[0]};
var formData = new FormData();
for (var key in myFormData) {
console.log(key, myFormData[key]);
formData.append(key, myFormData[key]);
}
$.ajax({
url : 'api/rootpath/childpath',
type : 'POST',
processData: false,
contentType: false, // Here the contentType is set to false, so what should I put at @Consumes in java code
data : {
formData: formData
}, …Run Code Online (Sandbox Code Playgroud) 使用 JAXB 实现 REST-Web 服务,我们有几种方法可以产生输出。
包含所有这些方法的类用@Produces({ MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON }). 如果请求通过了happy-path(没有发生错误),我们会在我们的方法中返回POJO,并且JAXB 会动态地将这些对象编组到application/xmlor 中application/json,因为客户端通过Accept: application/xxx;请求标头中的方式请求它。
我的问题是如何获取请求的内容类型,因为如果发生错误,我们将抛出WebApplicationException一个响应,其中应包含格式化为请求的内容类型的自定义错误消息。
我在我的REST服务web容器中使用apache-cxf 2.7.11+ jackson (codehaus) 1.9.13+ spring 3.5.我想知道什么是null从REST响应中删除值字段的最佳方法.
例如:
我的回复现在是这样的:
{
"name": "MyName",
"age": 10,
"address": null
}
Run Code Online (Sandbox Code Playgroud)
我希望我的回复是这样的(该address字段已被删除):
{
"name": "MyName",
"age": 10
}
Run Code Online (Sandbox Code Playgroud)
我在apache-cxf这里读到了拦截器和过滤器:
并想知道什么是最佳做法?是否有任何可配置的设置,我可以更改而不是实现我自己的文件管理器或拦截器类?
我正在使用beans.xml文件进行配置,因此我正在研究如何在这里配置它,我的bean是:
<bean id="jaxrsRestJacksonObjectMapper" class="org.codehaus.jackson.map.ObjectMapper"/>
<bean id="jsonProvider" class="org.codehaus.jackson.jaxrs.JacksonJsonProvider">
<property name="mapper" ref="jaxrsRestJacksonObjectMapper"/>
</bean>
<jaxrs:server id="restContainer" address="/">
<jaxrs:serviceBeans>
</jaxrs:serviceBeans>
<jaxrs:providers>
<ref bean="jsonProvider"/>
</jaxrs:providers>
</jaxrs:server>
Run Code Online (Sandbox Code Playgroud)
干杯!
我正在使用 Wildfly 9.0.1.Final
我正在部署一个 REST 应用程序,它的端点定义如下:
@GET
@Path("/view/products")
@Produces(MediaType.APPLICATION_JSON)
@CORSEnabled
@Protected
public String getConfiguredProducts(
@Context ContainerRequestContext request) {
if (request != null) {
Integer companyId = (Integer) request.getProperty("company");
if (companyId != null) {
//do stuff
}
}
// ... more staff
}
Run Code Online (Sandbox Code Playgroud)
当应用程序运行时,上下文被注入,即“请求”非空。
当我尝试检索该属性时,我得到了错误:
executing GET /complaints/view/products:
org.jboss.resteasy.spi.LoggableFailure: Unable to find contextual data
of type: javax.ws.rs.container.ContainerRequestContext
Run Code Online (Sandbox Code Playgroud)
请注意,该应用程序在 glassfish/jersey 上运行没有问题,当我尝试将其移动到 wildfly/resteasy 时出现了问题。
有任何想法吗?
我是Jax-RS的新手。我正在尝试使用Jersey实现一个简单的GET方法。我正在获得Collection资源的正确输出,但是实例资源却出现“ ERROR 400 Bad Request”。我被困在这一点上。一切似乎都是正确的,但我缺少一些我无法弄清的东西。我已经尝试了最近10天。任何帮助将是可观的。请在下面找到我的代码。我使用的是POSTMAN rest客户端,它抛出“意外的'T'”作为响应,而ARC则抛出“请求实体不能为空”。并且都是错误400错误的请求。
这是我的web.xml:
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns="http://xmlns.jcp.org/xml/ns/javaee"
xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd"
id="WebApp_ID" version="3.1">
<display-name>MessangerWithoutMaven</display-name>
<welcome-file-list>
<welcome-file>index.jsp</welcome-file>
</welcome-file-list>
<servlet>
<servlet-name>Jersey Web Application</servlet-name>
<servlet-class>org.glassfish.jersey.servlet.ServletContainer</servlet-class>
<init-param>
<param-name>jersey.config.server.provider.packages</param-name>
<param-value>com.manish.jax_rs.Messanger</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>Jersey Web Application</servlet-name>
<url-pattern>/webapi/*</url-pattern>
</servlet-mapping>
</web-app>
Run Code Online (Sandbox Code Playgroud)
这是我的MessageResource.java:
package com.manish.jax_rs.Messanger.resources;
import java.util.List;
import javax.websocket.server.PathParam;
import javax.ws.rs.Consumes;
import javax.ws.rs.GET;
import javax.ws.rs.POST;
import javax.ws.rs.Path;
import javax.ws.rs.Produces;
import javax.ws.rs.core.MediaType;
import com.manish.jax_rs.Messanger.model.Message;
import com.manish.jax_rs.Messanger.service.MessageService;
@Path("/messages")
public class MessageResource {
MessageService messageService = new MessageService();
@GET
@Produces(MediaType.APPLICATION_JSON)
public List<Message> getMessages(){
return …Run Code Online (Sandbox Code Playgroud) 我正在使用实现REST API javax.ws.rs.实现目标是尽可能安全,因此应验证每个输入.
对于输入验证,我实现一个公共类ValidatingHttpRequest实现HttpServletRequest.
我可以识别出11个甚至被调用的方法,现在所有其他方法都会抛出UnsupportedOperationException.但是,其中一些方法处理REST框架显然使用的内容.例如,我的代码不关心标题,而是getHeaders被调用.通过大量的逆向工程,我将能够找出使用的标头,并且应该进行验证,当然我可以进行验证.可能会引入非最佳行为,也可能是一些错误.并且HTTP请求有一些类似的方面.
但是之前没有人这样做过,可能有人真正了解REST框架是如何工作的?或者是不必要的,因为框架本身不能被愚弄?
所以我正在寻找一个完全验证的HttpServletRequest实现,或者说是为什么在这种情况下没有必要.当然,我将使用实现验证请求正文和参数.
我有一个使用jax-rs的Web服务,我的服务返回一个对象列表,但是您不知道如何添加自定义状态值来响应,例如,我要构建的结果如下:
如果可以:
{
"status": "success",
"message": "list ok!!",
"clients": [{
"name": "john",
"age": 23
},
{
"name": "john",
"age": 23
}]
}
Run Code Online (Sandbox Code Playgroud)
如果是错误:
{
"status": "error",
"message": "not found records",
"clients": []
}
Run Code Online (Sandbox Code Playgroud)
我的休息服务:
@POST
@Path("/getById")
@Consumes(MediaType.APPLICATION_JSON)
@Produces(MediaType.APPLICATION_JSON)
public List<Client> getById(Client id) {
try {
return Response.Ok(new ClientLogic().getById(id)).build();
//how to add status = success, and message = list! ?
} catch (Exception ex) {
return ??
// ex.getMessage() = "not found records"
//i want return json with satus = error …Run Code Online (Sandbox Code Playgroud)