在前端 Java Spring MVC 中创建请求对象时遇到困难,需要将以下 .NET-MVC 代码复制到 java

Facing difficulty in creating Request Object in Front End Java Spring MVC, need to replicate following .NET-MVC code into java

我正在使用 Java Spring-MVC 开发前端应用程序,但是我在创建用于访问 Web 服务的请求对象时遇到了困难,就像我在 .Net-MVC 中所做的那样。谁能告诉我下面给定代码的等效 类 和 Java 中的方法。

我需要将这两种方法从 .Net-MVC 复制到 Java。

第一种方法:

    private HttpWebRequest RequestObj { get; set; }
    public Stream DataStreamObj { get; set; }
    private RequestModel RequestModelObj { get; set;         

    public RequestGenerator(String WebserviceUrl)
    {
        RequestObj = (HttpWebRequest)WebRequest.Create(WebConfigurationManager.AppSettings["WebServiceURL"] + WebserviceUrl);
        RequestObj.Method = "POST";GenerateLoginRequest
        RequestObj.ContentType = "application/json";

        RequestModelObj = new RequestModel();
        RequestModelObj.ApiKey = WebConfigurationManager.AppSettings["apiKey"];
        RequestModelObj.DeviceId = Constant.AppConstants.ONE;

    }

第二种方法:

    private string CallWebservice(Dictionary<String, Object> RequestDict)
    {
        try
        {
        HttpWebRequest Request = (HttpWebRequest)RequestDict["request"];
            RequestModel RequestModel = (RequestModel)RequestDict["requestData"];

            //Tell them the length of content
            string Json = JsonConvert.SerializeObject(RequestModel);
            byte[] ByteArray = Encoding.UTF8.GetBytes(Json);

            Request.ContentLength = ByteArray.Length;

            //Write content on stream
            Stream DataStream = Request.GetRequestStream();
            DataStream.Write(ByteArray, 0, ByteArray.Length);
            DataStream.Close();

            //Initiate Call
            HttpWebResponse Response = GetWebResponse(Request);
            DataStream = Response.GetResponseStream();

            StreamReader Reader = new StreamReader(DataStream);
            // Read the content.
            string responseFromServer = Reader.ReadToEnd();
            // Display the content.

            Reader.Close();
            Response.Close();
            return responseFromServer;
        }
        catch (System.Net.WebException ex)
        {
            var response = ex.Response as HttpWebResponse;
            return "";

        }  
    }

RestTemplate class 是为调用 REST 服务而设计的,它的主要方法与 REST 的基础紧密相关也就不足为奇了,它们是 HTTP 协议的方法:HEAD、GET、POST、放置、删除和选项。例如。它的方法有headForHeaders(), getForObject(), postForObject(), put() and delete()等

阅读更多内容和源代码:Spring REST JSON 示例 HTTP GET 方法示例

1) 以字符串格式XML 获取员工collection 的表示

REST API 代码

@RequestMapping(value = "/employees", produces = 
MediaType.APPLICATION_XML_VALUE, method = RequestMethod.GET)
public String getAllEmployeesXML(Model model) 
{
model.addAttribute("employees", getEmployeesCollection());
return "xmlTemplate";
}

REST 客户端代码

private static void getEmployees()
{
final String uri = 
"http://localhost:8080/springrestexample/employees.xml";

RestTemplate restTemplate = new RestTemplate();
String result = restTemplate.getForObject(uri, String.class);

System.out.println(result);
}

2) 获取 JSON 员工 collection 的字符串格式表示

REST API 代码

@RequestMapping(value = "/employees", produces = 
MediaType.APPLICATION_JSON_VALUE,  method = RequestMethod.GET)
public String getAllEmployeesJSON(Model model) 
{
model.addAttribute("employees", getEmployeesCollection());
return "jsonTemplate";
}

REST 客户端代码

private static void getEmployees()
{
final String uri = 
"http://localhost:8080/springrestexample/employees.json";

RestTemplate restTemplate = new RestTemplate();
String result = restTemplate.getForObject(uri, String.class);

System.out.println(result);
}

3) 将自定义 HTTP Headers 与 RestTemplate

结合使用

REST API 代码

@RequestMapping(value = "/employees", produces = 
MediaType.APPLICATION_JSON_VALUE,  method = RequestMethod.GET)
public String getAllEmployeesJSON(Model model) 
{
model.addAttribute("employees", getEmployeesCollection());
return "jsonTemplate";
}

REST 客户端代码

private static void getEmployees()
{
final String uri = "http://localhost:8080/springrestexample/employees";

RestTemplate restTemplate = new RestTemplate();

HttpHeaders headers = new HttpHeaders();
headers.setAccept(Arrays.asList(MediaType.APPLICATION_JSON));
HttpEntity<String> entity = new HttpEntity<String>("parameters", 
headers);

ResponseEntity<String> result = restTemplate.exchange(uri, 
HttpMethod.GET, entity, String.class);

System.out.println(result);
}

4) 按映射获取数据 object

REST API 代码

@RequestMapping(value = "/employees", produces = 
MediaType.APPLICATION_XML_VALUE, method = RequestMethod.GET)
public String getAllEmployeesXML(Model model) 
{
model.addAttribute("employees", getEmployeesCollection());
return "xmlTemplate";
}

REST 客户端代码

private static void getEmployees()
{
final String uri = "http://localhost:8080/springrestexample/employees";
RestTemplate restTemplate = new RestTemplate();

EmployeeListVO result = restTemplate.getForObject(uri, 
EmployeeListVO.class);

System.out.println(result);

}

5) 在URL

中传递参数

REST API 代码

@RequestMapping(value = "/employees/{id}")
public ResponseEntity<EmployeeVO> getEmployeeById (@PathVariable("id") 
int id) 
{
if (id <= 3) {
    EmployeeVO employee = new 
EmployeeVO(1,"Lokesh","Gupta","howtodoinjava@gmail.com");
    return new ResponseEntity<EmployeeVO>(employee, HttpStatus.OK);
}
return new ResponseEntity(HttpStatus.NOT_FOUND);
}

REST 客户端代码

private static void getEmployeeById()
{
final String uri = 
"http://localhost:8080/springrestexample/employees/{id}";

Map<String, String> params = new HashMap<String, String>();
params.put("id", "1");

RestTemplate restTemplate = new RestTemplate();
EmployeeVO result = restTemplate.getForObject(uri, EmployeeVO.class, 
params);

System.out.println(result);
}

HTTP POST 方法示例

REST API 代码

@RequestMapping(value = "/employees", method = RequestMethod.POST)
public ResponseEntity<String> createEmployee(@RequestBody EmployeeVO 
employee) 
{
System.out.println(employee);
return new ResponseEntity(HttpStatus.CREATED);
}

REST 客户端代码

private static void createEmployee()
{
final String uri = "http://localhost:8080/springrestexample/employees";

EmployeeVO newEmployee = new EmployeeVO(-1, "Adam", "Gilly", 
"test@email.com");

RestTemplate restTemplate = new RestTemplate();
EmployeeVO result = restTemplate.postForObject( uri, newEmployee, 
EmployeeVO.class);

System.out.println(result);
}

HTTP PUT 方法示例

REST API 代码

@RequestMapping(value = "/employees/{id}", method = RequestMethod.PUT)
public ResponseEntity<EmployeeVO> updateEmployee(@PathVariable("id") 
int id, @RequestBody EmployeeVO employee) 
{
System.out.println(id);
System.out.println(employee);
return new ResponseEntity<EmployeeVO>(employee, HttpStatus.OK);
}

REST 客户端代码

private static void deleteEmployee()
{
final String uri = 
"http://localhost:8080/springrestexample/employees/{id}";

Map<String, String> params = new HashMap<String, String>();
params.put("id", "2");

EmployeeVO updatedEmployee = new EmployeeVO(2, "New Name", "Gilly", 
"test@email.com");

RestTemplate restTemplate = new RestTemplate();
restTemplate.put ( uri, updatedEmployee, params);
}

HTTP 删除方法示例

REST API 代码

@RequestMapping(value = "/employees/{id}", method = 
RequestMethod.DELETE)
public ResponseEntity<String> updateEmployee(@PathVariable("id") int 
id) 
{
System.out.println(id);
return new ResponseEntity(HttpStatus.OK);
}

REST 客户端代码

private static void deleteEmployee()
{
final String uri = 
"http://localhost:8080/springrestexample/employees/{id}";

Map<String, String> params = new HashMap<String, String>();
params.put("id", "2");

RestTemplate restTemplate = new RestTemplate();
restTemplate.delete ( uri,  params );
}