Java 创建一个返回JSON响应的简单页面

Java 创建一个返回JSON响应的简单页面,java,jsp,Java,Jsp,在我的项目中,在客户端工作的团队要求我编写一个示例测试页面,并给他们一个工作URL,他们可以点击并返回200。他们还要求我提供一个请求机构的样本。 这是我将向他们提出的请求 { "MyApp": { "mAppHeader": { "appId": "", "personId": "", "serviceName": "", "clientIP": "", "requestTimeStamp": "",

在我的项目中,在客户端工作的团队要求我编写一个示例测试页面,并给他们一个工作URL,他们可以点击并返回200。他们还要求我提供一个请求机构的样本。 这是我将向他们提出的请求

{
"MyApp": {
    "mAppHeader": {
        "appId": "",
        "personId": "",
        "serviceName": "",
        "clientIP": "",
        "requestTimeStamp": "",     
        "encoding": "",
        "inputDataFormat": "",
        "outputDataFormat": "",
        "environment": ""
    },
   "requestPayload": {
        "header": {
            "element": ""
        },
        "body": {
            "request": {
                "MyTestApp": {
                    "data": {
                        "AuthenticationRequestData": {
                            "appId": "",
                            "appPwd": ""
                        }
                    }
                }
            }
        }
    }
    }
}
为了开发示例页面,我不知道从哪里开始。请不要投反对票(以防这个问题看起来无关紧要),因为我没有处理JSP servlet的经验

这是我现在所拥有的。这是一个简单的登录页面-

    <%@ page language="java" 
    contentType="text/html; charset=windows-1256"
    pageEncoding="windows-1256"
%>

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">

<html>
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=windows-1256">
        <title>Login Page</title>
    </head>

    <body>
        <form action="TestClient">

            AppId       
            <input type="text" name="appID"/><br>       

            AppPassword
            <input type="text" name="appPwd"/>

            <input type="submit" value="submit">            

        </form>
    </body>
</html>
我的应用程序是一个简单的Java类,它有appID和appPassword,还有getter和setter,所以我不打算在这里发布


我的问题是——我这样做是正确的还是100%错误的?请给我您的建议。

在doGet方法中,使用Gson jarLibrary生成JSON响应

如下

Gson gson = new Gson();
HashMap map = new HashMap();

map.put("MyApp",object);

String jsonString = gson.toJson(map);
PrintWriter writer = response.getWriter();
writer.print(jsonString);

你可以利用谷歌的JSON库GSON来解析和形成JSON字符串,这让你的生活变得轻松。请查看以下链接以供参考。


您还可以参考以下链接

您说要将一些参数从客户端传递到服务器,但同时显示一条JSON消息,然后您的servlet代码看起来就像是随请求传递参数一样

如果您打算在请求正文中传递JSON,服务器将不会自动为您解析它,因此您的调用
request.getParameter(“appID”)
request.getParameter(“appPwd”)
将不起作用

相反,您需要像这样解析主体(基于上面的示例消息):

一旦servlet拥有了要用于创建响应的对象,就可以简单地生成JSON并使用
HttpServletResponse.getWriter()
编写它,如下所示:

SomeObject someObject = app.doSomething();

JsonObject jsonObject = Json.createObjectBuilder()
 .add("someValue", someObject.getSomeValue())
 .add("someOtherValue", someObject.getSomeOtherValue())
 .build();

response.setContentType("application/json");
Json.createJsonWriter(response.getWriter()).writeObject(jsonObject);

您可以创建一个格式化为相同格式的Java对象,然后只使用内置方法

@WebServlet(urlPatterns = {"/BasicWebServices"})
public class BasicWebServices extends HttpServlet{

    private static final long serialVersionUID = 1L;
    private static GsonBuilder gson_builder = new GsonBuilder().serializeNulls().setDateFormat("MM/dd/yyyy");
    public BasicWebServices(){
        super();
    }
    @Override
    public void destroy(){
          super.destroy();
    }
    @Override
    public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException{
        doPost(request, response);
    }
    @Override
    public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException{
        try{
            Gson gson = BasicWebServices.gson_builder.create();
            MyObject myObject = new MyObject();
            response.getWriter().write(gson.toJson(myObject));
        }
        catch(Exception e){
            response.getWriter().write("ERROR");
        }
    }
 }
然后,您只需将MyObject设置为与检索到的值相同的设置。 或者使一个对象的设置相同,或者如果可能,您可以使用与发送它的对象相同的java类

对于您的应用程序,您必须拥有一个类MyApp,然后拥有对象mAppHeader和requestPayload

public class mAppHeader(){
    String appId = "";
    String personId = "";
    String serviceName = "";
    String clientIP = "";
    String requestTimeStamp = "";     
    String encoding = "";
    String inputDataFormat = "";
    String outputDataFormat = "";
    String environment = "";
}

如果你能给我指一些链接,在那里我可以更好地了解需要做什么,那也很好。或者如果你能给我举个例子,也没关系。我只是在澄清我的方法。我不太相信我做得对,所以需要一些建议。如果他们要求200个JSON数据响应,他们可能计划使用AJAX请求。这意味着用户可能已经登录,这可能是您想与他们核实的内容。我没有答案,因为我面临着类似的问题(尽管这是个人研究);我可以告诉你我最近学到的一件事:servlet是无状态的(因此,如果你要检查那些appID和appPwd,你将无法区分两个不同的应用程序用户)。我想您最好将检查和json生成交给另一个bean。他们真的只需要一个示例,还是需要一个简单但实时的应用程序?如果他们所需要的只是一些案例的样本数据,只需编写文本文件并静态地提供它们。如果你确实需要编写一个完整的应用程序,不要直接接触servlet;它们是非常低级的工具。相反,使用类似SpringMVC的东西;使用SpringBoot,您可以用大约25行代码编写这样一个简单的应用程序。@Anthony-这是一个iPhone客户端,他们不会使用Ajax。他们需要我做的就是给他们一个请求主体,以及一个他们可以点击的服务器上的示例测试页面,然后返回200。
@WebServlet(urlPatterns = {"/BasicWebServices"})
public class BasicWebServices extends HttpServlet{

    private static final long serialVersionUID = 1L;
    private static GsonBuilder gson_builder = new GsonBuilder().serializeNulls().setDateFormat("MM/dd/yyyy");
    public BasicWebServices(){
        super();
    }
    @Override
    public void destroy(){
          super.destroy();
    }
    @Override
    public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException{
        doPost(request, response);
    }
    @Override
    public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException{
        try{
            Gson gson = BasicWebServices.gson_builder.create();
            MyObject myObject = new MyObject();
            response.getWriter().write(gson.toJson(myObject));
        }
        catch(Exception e){
            response.getWriter().write("ERROR");
        }
    }
 }
public class mAppHeader(){
    String appId = "";
    String personId = "";
    String serviceName = "";
    String clientIP = "";
    String requestTimeStamp = "";     
    String encoding = "";
    String inputDataFormat = "";
    String outputDataFormat = "";
    String environment = "";
}