java restful 为什么@GET 方法不能用@@FormParam直接获取JSP表单里的值,

java restful 为什么@GET 方法不能用@FormParam直接获取JSP表单里的值,
@PUT,@DELETE,@PSOT方法的可以

1个回答

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
其他相关推荐
java restful @QueryParam 获 取 JSP 表单的值
java restful @QueryParam获取JSP表单的值,为什么有的可以拿到,有的是null
restful是什么 对javaweb开发起到什么作用什么时候需要用restful
restful是什么 对javaweb开发起到什么作用什么时候需要用restful
Java后台调用restful接口,怎么调用,get带参数的怎么传递。
接口是这样的: GET: https://roomserver-dev.netease.im/v1/api/rooms/{id}
如何用Scala接收Java_Restful发送的数据?
简单说就是 合作方是使用java语言编写的restful.然后发送一些字段过来. 而我用scala语言编写接收程序.. 接收到后返回一个字符串.. 求教一个实例或者思路.... 谢谢各位大佬.
我想在服务器端实现Restful服务,用什么方法实现比较好?
以前一直访问Restful,没有自己在服务器端实现过,我现在想在tomcat或websphere上用Java实现Restful服务,有什么技术或者框架实现比较好?
Java后台和前台iOS native API用Restful通讯,怎么实现MVC设计模式呢?
前台是iPad,用iOS native API和Java后台用Restful进行通讯,所以没有浏览器了,Java端应该怎么实现MVC这些设计模式呢? Model和以前是一样的,View没有了,变成了Restful,那么怎么实现Controller呢?因为这个项目是企业级应用,所以不能用框架,只能用J2EE技术,像 JAX-RS、JAX-WS、CDI、Bean Validation等。 我以前开源框架用多了,让我自己直接写,我一时有些想不明白,Java端应该用什么样的设计模式?应该实现呢?
不懂就问,restful在查询时,使用的是http get 这种方式不是很容易被人抓包吗?数据也不安全啊?
不懂就问,restful在查询时,使用的是http get 这种方式不是很容易被人抓包吗?
python restful api怎么实现多线程,求大神解答!!!
python restful api怎么实现多线程多进程,求大神解答!!! 就是我看到多线程的例子都是t = threading.Thread(target=函数) 然后t.start启动线程,那如果是restful 写的api呢,总不能写成 t = threading.Thread(target=类名.get或者post吧)
java api开发 restful风格接口
![图片说明](https://img-ask.csdn.net/upload/201703/19/1489913872_694595.png) 新人 怎么区分请求方式 是图片上这样么,来大神指点下啊。
restful请求index方法时,真正请求的是index_get的方法,请教下源代码这块逻辑在哪。
请求的域名是:cidemo.com/Admin/RestfulController/index/2 但是走的是 Admin模块下的RestfulController控制器中的index_get 得方法 RestfulController控制器中我继承了REST_Controller 但是在REST_Controller 中我没发现将index 变成 index_get的逻辑啊。有哪位大神帮忙解答下 处理逻辑的控制器文件: ``` <?php defined('BASEPATH') OR exit('No direct script access allowed'); /** * Example * * This is an example of a few basic user interaction methods you could use * all done with a hardcoded array. * */ // This can be removed if you use __autoload() in config.php OR use Modular Extensions require APPPATH . '/libraries/REST_Controller.php'; class Restful extends REST_Controller { function index_get($id = '') { var_dump($id);die; // Example data for testing. $widgets = array( 1 => array('id' => 1, 'name' => 'sprocket'), 2 => array('id' => 2, 'name' => 'gear') ); if (!$id) { $id = $this->get('id'); } if (!$id) { //$widgets = $this->widgets_model->getWidgets(); if ($widgets) $this->response($widgets, 200); // 200 being the HTTP response code else $this->response(array('error' => 'Couldn\'t find any widgets!'), 404); } //$widget = $this->widgets_model->getWidget($id); $widget = @$widgets[$id]; // test code if ($widget) $this->response($widget, 200); // 200 being the HTTP response code else $this->response(array('error' => 'Widget could not be found'), 404); } function index_post() { $data = $this->_post_args; try { //$id = $this->widgets_model->createWidget($data); $id = 3; // test code //throw new Exception('Invalid request data', 400); // test code //throw new Exception('Widget already exists', 409); // test code } catch (Exception $e) { // Here the model can throw exceptions like the following: // * For invalid input data: new Exception('Invalid request data', 400) // * For a conflict when attempting to create, like a resubmit: new Exception('Widget already exists', 409) $this->response(array('error' => $e->getMessage()), $e->getCode()); } if ($id) { $widget = array('id' => $id, 'name' => $data['name']); // test code //$widget = $this->widgets_model->getWidget($id); $this->response($widget, 201); // 201 being the HTTP response code } else $this->response(array('error' => 'Widget could not be created'), 404); } public function index_put() { $data = $this->_put_args; try { //$id = $this->widgets_model->updateWidget($data); $id = $data['id']; // test code //throw new Exception('Invalid request data', 400); // test code } catch (Exception $e) { // Here the model can throw exceptions like the following: // * For invalid input data: new Exception('Invalid request data', 400) // * For a conflict when attempting to create, like a resubmit: new Exception('Widget already exists', 409) $this->response(array('error' => $e->getMessage()), $e->getCode()); } if ($id) { $widget = array('id' => $data['id'], 'name' => $data['name']); // test code //$widget = $this->widgets_model->getWidget($id); $this->response($widget, 200); // 200 being the HTTP response code } else $this->response(array('error' => 'Widget could not be found'), 404); } function index_delete($id = '') { // Example data for testing. $widgets = array( 1 => array('id' => 1, 'name' => 'sprocket'), 2 => array('id' => 2, 'name' => 'gear'), 3 => array('id' => 3, 'name' => 'nut') ); if (!$id) { $id = $this->get('id'); } if (!$id) { $this->response(array('error' => 'An ID must be supplied to delete a widget'), 400); } //$widget = $this->widgets_model->getWidget($id); $widget = @$widgets[$id]; // test code if ($widget) { try { //$this->widgets_model->deleteWidget($id); //throw new Exception('Forbidden', 403); // test code } catch (Exception $e) { // Here the model can throw exceptions like the following: // * Client is not authorized: new Exception('Forbidden', 403) $this->response(array('error' => $e->getMessage()), $e->getCode()); } $this->response($widget, 200); // 200 being the HTTP response code } else $this->response(array('error' => 'Widget could not be found'), 404); } public function response($info) { if (is_array($info)) { echo json_encode($info); } } public function index(){ echo "this is index methods"; } } ``` 继承的restful类文件: ``` <?php if ( ! defined('BASEPATH')) exit('No direct script access allowed'); class REST_Controller extends CI_Controller { private $method; private $format; private $get_args; private $put_args; private $args; // List all supported methods, the first will be the default format private $supported_formats = array( 'xml' => 'application/xml', 'json' => 'application/json', 'serialize' => 'text/plain', 'php' => 'text/plain', 'html' => 'text/html', 'csv' => 'application/csv' ); // Constructor function function __construct() { parent::__construct(); // How is this request being made? POST, DELETE, GET, PUT? $this->method = $this->_detect_method(); // Lets grab the config and get ready to party $this->load->config('rest'); if($this->config->item('rest_auth') == 'basic') { echo "basic"; $this->_prepareBasicAuth(); } elseif($this->config->item('rest_auth') == 'digest') { echo "digest"; $this->_prepareDigestAuth(); } // Set up our GET variables $this->get_args = $this->uri->uri_to_assoc();//获取参数 var_dump($this->get_args); // Set up out PUT variables var_dump(parse_str(file_get_contents('php://input'), $this->put_args)); parse_str(file_get_contents('php://input'), $this->put_args); // Merge both for one mega-args variable $this->args = array_merge($this->get_args, $this->put_args); // Which format should the data be returned in? $this->format = $this->_detect_format();//设置参数方式 json 、 xml } /* * Remap * * Requests are not made to methods directly The request will be for an "object". * this simply maps the object and method to the correct Controller method. */ function _remap($object_called) { $controller_method = $object_called.'_'.$this->method; if(method_exists($this, $controller_method)) { $this->$controller_method(); } else { show_404(); } } /* * Responce * * Takes pure data and optionally a status code, then creates the responce */ function responce($data = '', $http_code = 200) { $this->output->set_status_header($http_code); // If the method exists, call it if(method_exists($this, '_'.$this->format)) { // Set a XML header $this->output->set_header('Content-type: '.$this->supported_formats[$this->format]); $formatted_data = $this->{'_'.$this->format}($data); $this->output->set_output( $formatted_data ); } else { $this->output->set_output( $data ); } } /* * Detect format * * Detect which format should be used to output the data */ private function _detect_format() { if(array_key_exists('format', $this->args) && array_key_exists($this->args['format'], $this->supported_formats)) { return $this->args['format']; } // If a HTTP_ACCEPT header is present... if($this->input->server('HTTP_ACCEPT')) { // Check to see if it matches a supported format foreach(array_keys($this->supported_formats) as $format) { if(strpos($this->input->server('HTTP_ACCEPT'), $format) !== FALSE) { return $format; } } } // If it doesnt match any or no HTTP_ACCEPT header exists, uses the first (default) supported format list($default)=array_keys($this->supported_formats); return $default; } /* * Detect method * * Detect which method (POST, PUT, GET, DELETE) is being used */ private function _detect_method() { $method = strtolower($this->input->server('REQUEST_METHOD')); if(in_array($method, array('get', 'delete', 'post', 'put'))) { return $method; } return 'get'; } // INPUT FUNCTION -------------------------------------------------------------- public function get($key) { return array_key_exists($key, $this->get_args) ? $this->input->xss_clean( $this->get_args[$key] ) : $this->input->get($key) ; } public function post($key) { return $this->input->post($key); } public function put($key) { return array_key_exists($key, $this->put_args) ? $this->input->xss_clean( $this->put_args[$key] ) : FALSE ; } // SECURITY FUNCTIONS --------------------------------------------------------- private function _checkLogin($username = '', $password = NULL) { if(empty($username)) { return FALSE; } $valid_logins =& $this->config->item('rest_valid_logins'); if(!array_key_exists($username, $valid_logins)) { return FALSE; } // If actually NULL (not empty string) then do not check it if($password !== NULL) { if($valid_logins[$username] != $password) { return FALSE; } } return TRUE; } private function _prepareBasicAuth() { $username = NULL; $password = NULL; // mod_php if (isset($_SERVER['PHP_AUTH_USER'])) { $username = $_SERVER['PHP_AUTH_USER']; $password = $_SERVER['PHP_AUTH_PW']; } // most other servers elseif (isset($_SERVER['HTTP_AUTHENTICATION'])) { if (strpos(strtolower($_SERVER['HTTP_AUTHENTICATION']),'basic')===0) { list($username,$password) = explode(':',base64_decode(substr($_SERVER['HTTP_AUTHORIZATION'], 6))); } } if ( !$this->_checkLogin($username, $password) ) { $this->_forceLogin(); } } private function _prepareDigestAuth() { $uniqid = uniqid(""); // Empty argument for backward compatibility // We need to test which server authentication variable to use // because the PHP ISAPI module in IIS acts different from CGI if(isset($_SERVER['PHP_AUTH_DIGEST'])) { $digest_string = $_SERVER['PHP_AUTH_DIGEST']; } elseif(isset($_SERVER['HTTP_AUTHORIZATION'])) { $digest_string = $_SERVER['HTTP_AUTHORIZATION']; } else { $digest_string = ""; } /* The $_SESSION['error_prompted'] variabile is used to ask the password again if none given or if the user enters a wrong auth. informations. */ if ( empty($digest_string) ) { $this->_forceLogin($uniqid); exit; } // We need to retrieve authentication informations from the $auth_data variable preg_match_all('@(username|nonce|uri|nc|cnonce|qop|response)=[\'"]?([^\'",]+)@', $digest_string, $matches); $digest = array_combine($matches[1], $matches[2]); if ( !array_key_exists('username', $digest) || !$this->_checkLogin($digest['username']) ) { $this->responce(NULL, 401); exit; } $valid_logins =& $this->config->item('rest_valid_logins'); $valid_pass = $valid_logins[$digest['username']]; // This is the valid response expected $A1 = md5($digest['username'] . ':' . $this->config->item('rest_realm') . ':' . $valid_pass); $A2 = md5(strtoupper($this->method).':'.$digest['uri']); $valid_response = md5($A1.':'.$digest['nonce'].':'.$digest['nc'].':'.$digest['cnonce'].':'.$digest['qop'].':'.$A2); if ($digest['response'] != $valid_response) { $this->responce(NULL, 401); exit; } } private function _forceLogin($nonce = '') { header('HTTP/1.0 401 Unauthorized'); header('HTTP/1.1 401 Unauthorized'); if($this->config->item('rest_auth') == 'basic') { header('WWW-Authenticate: Basic realm="'.$this->config->item('rest_realm').'"'); } elseif($this->config->item('rest_auth') == 'digest') { header('WWW-Authenticate: Digest realm="'.$this->config->item('rest_realm'). '" qop="auth" nonce="'.$nonce.'" opaque="'.md5($this->config->item('rest_realm')).'"'); } echo 'Text to send if user hits Cancel button'; die(); } // FORMATING FUNCTIONS --------------------------------------------------------- // Format XML for output private function _xml($data = array(), $structure = NULL, $basenode = 'xml') { // turn off compatibility mode as simple xml throws a wobbly if you don't. if (ini_get('zend.ze1_compatibility_mode') == 1) { ini_set ('zend.ze1_compatibility_mode', 0); } if ($structure == NULL) { $structure = simplexml_load_string("<?xml version='1.0' encoding='utf-8'?><$basenode />"); } // loop through the data passed in. foreach($data as $key => $value) { // no numeric keys in our xml please! if (is_numeric($key)) { // make string key... //$key = "item_". (string) $key; $key = "item"; } // replace anything not alpha numeric $key = preg_replace('/[^a-z0-9_-]/i', '', $key); // if there is another array found recrusively call this function if (is_array($value)) { $node = $structure->addChild($key); // recrusive call. $this->_xml($value, $node, $basenode); } else { // add single node. $value = htmlentities($value, ENT_NOQUOTES, "UTF-8"); $UsedKeys[] = $key; $structure->addChild($key, $value); } } // pass back as string. or simple xml object if you want! return $structure->asXML(); } // Format HTML for output private function _html($data = array()) { // Multi-dimentional array if(isset($data[0])) { $headings = array_keys($data[0]); } // Single array else { $headings = array_keys($data); } $this->load->library('table'); $this->table->set_heading($headings); foreach($data as &$row) { $this->table->add_row($row); } return $this->table->generate(); } // Format HTML for output private function _csv($data = array()) { // Multi-dimentional array if(isset($data[0])) { $headings = array_keys($data[0]); $output = implode(',', $headings)."\r\n"; foreach($data as &$row) { $output .= '"'.implode('","',$row)."\"\r\n"; } } // Single array else { $headings = array_keys($data); $output = implode(',', $headings)."\r\n"; $output .= '"'.implode('","',$data)."\"\r\n"; } return $output; } // Encode as JSON private function _json($data = array()) { return json_encode($data); } // Encode as Serialized array private function _serialize($data = array()) { return serialize($data); } // Encode raw PHP private function _php($data = array()) { return var_export($data); } } ?> ```
使用jaxrs-ri-2.25.1做restful报错:java.lang.ClassNotFoundException
工具:eclipse tomcat 7.0 jar包![图片说明](https://img-ask.csdn.net/upload/201906/23/1561296249_366313.png) 数据类: import java.io.Serializable; import javax.xml.bind.annotation.XmlElement; import javax.xml.bind.annotation.XmlRootElement; @XmlRootElement(name="userData") public class UserData implements Serializable{ private int age; private String name; public UserData() { super(); } public UserData(int age, String name) { super(); this.age = age; this.name = name; } public int getAge() { return age; } @XmlElement public void setAge(int age) { this.age = age; } public String getName() { return name; } @XmlElement public void setName(String name) { this.name = name; } service层: package com.entity; import java.util.ArrayList; import java.util.List; import javax.ws.rs.GET; import javax.ws.rs.Path; import javax.ws.rs.Produces; import javax.ws.rs.core.MediaType; import com.entity.UserData; @Path("/RestfulService") public class RestfulService { @GET @Path("/getUser") @Produces(MediaType.APPLICATION_XML) public List<UserData> getData(){ UserData userData = new UserData(); userData.setAge(2); userData.setName("33"); List<UserData> list = new ArrayList<>(); list.add(userData); return list; } } 使用postman测试出错![图片说明](https://img-ask.csdn.net/upload/201906/23/1561296456_146104.png) 后台: java.lang.ClassNotFoundException: org.glassfish.jersey.servlet.ServletContainer at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1714) at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1559) at org.apache.catalina.core.DefaultInstanceManager.loadClass(DefaultInstanceManager.java:532) at org.apache.catalina.core.DefaultInstanceManager.loadClassMaybePrivileged(DefaultInstanceManager.java:514) at org.apache.catalina.core.DefaultInstanceManager.newInstance(DefaultInstanceManager.java:133) at org.apache.catalina.core.StandardWrapper.loadServlet(StandardWrapper.java:1136) at org.apache.catalina.core.StandardWrapper.allocate(StandardWrapper.java:857) at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:136) at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:123) at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:472) at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:168) at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:99) at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:929) at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118) at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:407) at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1002) at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:585) at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:310) at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615) at java.lang.Thread.run(Thread.java:724) 请帮忙看下
.Net core web application MVC 如何使用restful
为什么新建一个web api项目,里面的原生代码都是restful形式,而且还能用,在webapplication里,虽说创建的时候有说明支持RESTful http形式,但是按照webapi里面的代码格式,COPY过来就没反应了,请问这是为什么?需要改哪写东西吗? 比如说这些代码如何能在web应用程序里有效: [HttpGet] public ActionResult<IEnumerable<string>> Get() { return new string[] { "value1", "value2" }; } // GET api/values/5 [HttpGet("{id}")] public ActionResult<string> Get(int id) { return "value"; }
怎么做能提供RESTful的安全性?
在企业级应用中,iOS和Java之间用RESTful通信,如果想提高安全性,用什么比较好?OAuth是不是一种选择?还有其他的吗?
Java开发接口(webservice或者restful)怎么能禁止工具或浏览器调用,只可以代码层面调用
如题,如题,如题,如题,如题,如题,如题,如题,如题,如题,如题,如题,如题,如题,如题,如题,如题,如题,如题,如题!!!!!!
spring后端restful格式接口使用nginx报404错误
项目进行前后端分离,后端接口在服务起来后直接访问没有问题 后端服务地址:localhost:8081 测试接口是否正常地址:localhost:8081/index 请求方式是GET ![图片说明](https://img-ask.csdn.net/upload/201911/05/1572917302_14176.png) ![图片说明](https://img-ask.csdn.net/upload/201911/05/1572917558_704068.png) 配置nginx ``` http { default_type application/octet-stream; sendfile on; keepalive_timeout 65; server { listen 80; server_name localhost; #charset koi8-r; #access_log logs/host.access.log main; location / { proxy_pass http://127.0.0.1:8080; proxy_redirect default; #设置主机头和客户端真实地址,以便服务器获取客户端真实IP proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; } location /test { # 自定义nginx接口前缀 include uwsgi_params; proxy_pass http://127.0.0.1:8081; # 后台api接口地址 proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; } } } ``` 访问地址:http://localhost/test/index 会提示404,并且返回的是我后端spring预设的404页面,所以感觉后台是访问到了,但是为啥会出404呢?是我路径没配正确吗? ![图片说明](https://img-ask.csdn.net/upload/201911/05/1572917609_886715.png) 为什么会用这个访问地址测试,是因为我前端是vue+axios,所以我使用get方法传入的url参数是/test/index ,他浏览器里请求的就是这个地址,所以我就想直接拿这个路径来试了,这样正确吗?然后怎么样才能解决这个404问题正常调用接口解决跨域请求呢?求大佬指教! ======================================= 补充一下: 前端服务访问地址:localhost:8080 在我启动nginx后,访问localhost是能出现我的前端首页的 404页面只有html内容,也没加载出样式来
Jquery调用asp.net core web api开发的restful,post类型响应的却是get方法
$.ajax({ type: "POST", url: "http://localhost:4413/api/WLCode/", contentType: "application/json; charset=utf-8", dataType: 'jsonp', crossDomain: true, data: { "prod_group": "group1", "prod_type": "type1", "prod_style": "style1", "prod_code": "wlcode1", "prod_desc": "物料", "prod_unit": "个", "is_used": "1" }, success: function (data) { alert(JSON.stringify(data)); }, error: function (data) { debugger alert('添加失败!'); } }); 上面是调用代码,响应的却是下面get方法 // GET: api/WLCode [HttpGet] public IEnumerable<string> Get() { return new string[] { "value1", "value2" }; } 下面是post方法代码 [HttpPost] public string Post([FromBody]WLCode wlcode) { string msg = string.Empty; DbHelperSql helperSql = new DbHelperSql(ConnectionString.DefaultConnection); if (string.IsNullOrEmpty(wlcode.prod_group)) { msg += "物料组,"; } if (string.IsNullOrEmpty(wlcode.prod_type)) { msg += "物料小类,"; } if (string.IsNullOrEmpty(wlcode.prod_type)) { msg += "物料类型,"; } if (string.IsNullOrEmpty(wlcode.prod_code)) { msg += "SAP物料编码,"; } if (string.IsNullOrEmpty(wlcode.prod_desc)) { msg += "物料名称,"; } if (string.IsNullOrEmpty(wlcode.prod_unit)) { msg += "主计量单位,"; } if (!string.IsNullOrEmpty(msg)) { msg += msg.TrimEnd(','); msg += "不能为空"; } else { try { string strsql = "INSERT INTO InterFace_WLCode(prod_group,prod_type,prod_style,prod_code,zl_prod_code,zt_prod_code,prod_desc,long_desc,prod_unit, is_used) " + "VALUES('{0}','{1}','{2}','{3}','{4}','{5}','{6}','{7}','{8}','{9}')"; int i = helperSql.ExecuteSql(string.Format(strsql, wlcode.prod_group, wlcode.prod_type, wlcode.prod_style, wlcode.prod_code, wlcode.zl_prod_code, wlcode.zt_prod_code, wlcode.prod_desc, wlcode.long_desc, wlcode.prod_unit, wlcode.is_used)); } catch (Exception ex) { msg = ex.Message; } } return msg; } 用postman工具测试是没问题的,但是用自己写的jQuery调用就会有问题,用f12追踪不知道怎么类型也是get。我调用方法明明写的是type=post.请哪位大神指教一下
如何设计RESTful的视图层API?
很多关于RESTful的文章都详细介绍了设计几个基础API的URL, 例: GET /users GET /users/{name} POST /users/{name} PUT /users/{name} DELETE /users/{name} 这里的两个GET, 我的理解应该是返回json的数据. 对应这套增删改查, 通常会有这样三个页面: user/list.html user/add.html user/edit.html 那么请求这些html文本URL, 应该如何按照RESTful去设计呢? --- 有人说html是客户端的东西, restful只管服务器, 但是rest概念中的资源和超媒体, 难道只有json和xml, 不包括html和视图层吗? --- 补充: 看了下关于html是静态文件的回答, 那么我换个简单问法, 当我想请求一个网站的用户列表页面, 我在浏览器里输入的url, 应该是 /user/list.html 还是 /users/ ? 如果按照"静态文件"的说法, 用html + ajax来获取数据, 那么url就应该是前者, 然而我观察到的现在restful的网站明显不是这么干的. 比如github, Amazon, 他们在浏览器里的url就是 /products/{productid} 这样.
RESTful API在代码中调用出现 505错误
问题如下: 1.RESTful API在浏览器中访问,没有问题,返回结果正确。 2.在代码里调这个RESTful API就会报505错误。 调用的代码结构如下: 1.先鉴权,并保存cookie final String userPassword = bean.getUsername() + ":" + bean.getPassword(); final String encoding = new sun.misc.BASE64Encoder().encode(userPassword.getBytes()); String ssoCookieValue = null; try { final URL url = new URL(bean.getServerURL() + "authentication-point/authenticate"); final HttpURLConnection conn = (HttpURLConnection)url.openConnection(); // add the timeout to the connection and read this.setTimeout(conn); // set the basic authentication conn.setRequestProperty("Authorization", "Basic " + encoding); // do get conn.connect(); // try to authenticate the qc user and password final int responseCode = conn.getResponseCode(); if (responseCode != HttpURLConnection.HTTP_OK) { if (responseCode == HttpURLConnection.HTTP_UNAUTHORIZED) { throw new RESTException(Constants.EXCEPTION_AUTH_FAIL, new String[] {}); } else if (responseCode == HttpURLConnection.HTTP_NOT_FOUND) { throw new RESTException(Constants.EXCEPTION_NETWORK_FAIL, new String[] {}); } else { log.error("*** response code is " + responseCode); throw new RESTException(Constants.EXCEPTION_NETWORK_FAIL, new String[] {}); } } // get return cookie ssoCookieValue = this.getCookieValue(conn, "LWSSO_COOKIE_KEY"); log.debug("Cookie for LWSSO_COOKIE_KEY: " + ssoCookieValue); // disconnect conn.disconnect(); } catch (IOException e) { if (e instanceof java.net.UnknownHostException) { throw new RESTException(Constants.EXCEPTION_UNKNOWN_HOST, new String[] {}); } else if (e instanceof java.net.SocketTimeoutException) { throw new RESTException(Constants.EXCEPTION_CONNECTION_TIMEOUT, new String[] {}); } } 2.然后构造connection,链接server,发出请求 final URL url = new URL(this.buildRequestURL(bean, entityId)); final HttpURLConnection conn = (HttpURLConnection)url.openConnection(); // add the timeout to the connection and read this.setTimeout(conn); this.buildHeader(conn, ssoCookieValue); this.buildBody(conn, qc, entityId); conn.connect(); 3.解析response final int responseCode = conn.getResponseCode(); final JAXBContext jaxb = JAXBContext.newInstance("com.mycompany.myproject.jaxb"); final Unmarshaller unmarshall = jaxb.createUnmarshaller(); Object result = null; if (this.isSuccessful(responseCode)) { result = this.handleSuccessfulResponse(unmarshall, conn); } else { this.handleFailedResponse(responseCode, unmarshall, conn); } this.setResult(result); 问题就出在第三步的第一句 final int responseCode = conn.getResponseCode(); debug到这里,看到responseCode是505. 上网搜了一下,有人说505错误是不支持HTTP/1.1造成的,解决办法是取消IE中的“使用HTTP1.1”。 我这里的IE即使勾选上“使用HTTP1.1”,调用这个RESTful API也不会出错。 为什么在代码里就会有505错误呢? 请大家指点。谢谢!
camel开发restful的时候server类无法获取参数
新人正在学习camel-cxf 发布一个restful 服务 get请求的时候没有问题,当提交post请求的时候server类的代码无法获取参数值
爬虫福利二 之 妹子图网MM批量下载
爬虫福利一:27报网MM批量下载    点击 看了本文,相信大家对爬虫一定会产生强烈的兴趣,激励自己去学习爬虫,在这里提前祝:大家学有所成! 目标网站:妹子图网 环境:Python3.x 相关第三方模块:requests、beautifulsoup4 Re:各位在测试时只需要将代码里的变量 path 指定为你当前系统要保存的路径,使用 python xxx.py 或IDE运行即可。
Java学习的正确打开方式
在博主认为,对于入门级学习java的最佳学习方法莫过于视频+博客+书籍+总结,前三者博主将淋漓尽致地挥毫于这篇博客文章中,至于总结在于个人,实际上越到后面你会发现学习的最好方式就是阅读参考官方文档其次就是国内的书籍,博客次之,这又是一个层次了,这里暂时不提后面再谈。博主将为各位入门java保驾护航,各位只管冲鸭!!!上天是公平的,只要不辜负时间,时间自然不会辜负你。 何谓学习?博主所理解的学习,它
程序员必须掌握的核心算法有哪些?
由于我之前一直强调数据结构以及算法学习的重要性,所以就有一些读者经常问我,数据结构与算法应该要学习到哪个程度呢?,说实话,这个问题我不知道要怎么回答你,主要取决于你想学习到哪些程度,不过针对这个问题,我稍微总结一下我学过的算法知识点,以及我觉得值得学习的算法。这些算法与数据结构的学习大多数是零散的,并没有一本把他们全部覆盖的书籍。下面是我觉得值得学习的一些算法以及数据结构,当然,我也会整理一些看过
大学四年自学走来,这些私藏的实用工具/学习网站我贡献出来了
大学四年,看课本是不可能一直看课本的了,对于学习,特别是自学,善于搜索网上的一些资源来辅助,还是非常有必要的,下面我就把这几年私藏的各种资源,网站贡献出来给你们。主要有:电子书搜索、实用工具、在线视频学习网站、非视频学习网站、软件下载、面试/求职必备网站。 注意:文中提到的所有资源,文末我都给你整理好了,你们只管拿去,如果觉得不错,转发、分享就是最大的支持了。 一、PDF搜索网站推荐 对于大部
linux系列之常用运维命令整理笔录
本博客记录工作中需要的linux运维命令,大学时候开始接触linux,会一些基本操作,可是都没有整理起来,加上是做开发,不做运维,有些命令忘记了,所以现在整理成博客,当然vi,文件操作等就不介绍了,慢慢积累一些其它拓展的命令,博客不定时更新 顺便拉下票,我在参加csdn博客之星竞选,欢迎投票支持,每个QQ或者微信每天都可以投5票,扫二维码即可,http://m234140.nofollow.ax.
比特币原理详解
一、什么是比特币 比特币是一种电子货币,是一种基于密码学的货币,在2008年11月1日由中本聪发表比特币白皮书,文中提出了一种去中心化的电子记账系统,我们平时的电子现金是银行来记账,因为银行的背后是国家信用。去中心化电子记账系统是参与者共同记账。比特币可以防止主权危机、信用风险。其好处不多做赘述,这一层面介绍的文章很多,本文主要从更深层的技术原理角度进行介绍。 二、问题引入  假设现有4个人
程序员接私活怎样防止做完了不给钱?
首先跟大家说明一点,我们做 IT 类的外包开发,是非标品开发,所以很有可能在开发过程中会有这样那样的需求修改,而这种需求修改很容易造成扯皮,进而影响到费用支付,甚至出现做完了项目收不到钱的情况。 那么,怎么保证自己的薪酬安全呢? 我们在开工前,一定要做好一些证据方面的准备(也就是“讨薪”的理论依据),这其中最重要的就是需求文档和验收标准。一定要让需求方提供这两个文档资料作为开发的基础。之后开发
网页实现一个简单的音乐播放器(大佬别看。(⊙﹏⊙))
今天闲着无事,就想写点东西。然后听了下歌,就打算写个播放器。 于是乎用h5 audio的加上js简单的播放器完工了。 欢迎 改进 留言。 演示地点跳到演示地点 html代码如下`&lt;!DOCTYPE html&gt; &lt;html&gt; &lt;head&gt; &lt;title&gt;music&lt;/title&gt; &lt;meta charset="utf-8"&gt
Python十大装B语法
Python 是一种代表简单思想的语言,其语法相对简单,很容易上手。不过,如果就此小视 Python 语法的精妙和深邃,那就大错特错了。本文精心筛选了最能展现 Python 语法之精妙的十个知识点,并附上详细的实例代码。如能在实战中融会贯通、灵活使用,必将使代码更为精炼、高效,同时也会极大提升代码B格,使之看上去更老练,读起来更优雅。 1. for - else 什么?不是 if 和 else 才
数据库优化 - SQL优化
前面一篇文章从实例的角度进行数据库优化,通过配置一些参数让数据库性能达到最优。但是一些“不好”的SQL也会导致数据库查询变慢,影响业务流程。本文从SQL角度进行数据库优化,提升SQL运行效率。 判断问题SQL 判断SQL是否有问题时可以通过两个表象进行判断: 系统级别表象 CPU消耗严重 IO等待严重 页面响应时间过长
2019年11月中国大陆编程语言排行榜
2019年11月2日,我统计了某招聘网站,获得有效程序员招聘数据9万条。针对招聘信息,提取编程语言关键字,并统计如下: 编程语言比例 rank pl_ percentage 1 java 33.62% 2 c/c++ 16.42% 3 c_sharp 12.82% 4 javascript 12.31% 5 python 7.93% 6 go 7.25% 7
通俗易懂地给女朋友讲:线程池的内部原理
餐厅的约会 餐盘在灯光的照耀下格外晶莹洁白,女朋友拿起红酒杯轻轻地抿了一小口,对我说:“经常听你说线程池,到底线程池到底是个什么原理?”我楞了一下,心里想女朋友今天是怎么了,怎么突然问出这么专业的问题,但做为一个专业人士在女朋友面前也不能露怯啊,想了一下便说:“我先给你讲讲我前同事老王的故事吧!” 大龄程序员老王 老王是一个已经北漂十多年的程序员,岁数大了,加班加不动了,升迁也无望,于是拿着手里
经典算法(5)杨辉三角
写在前面: 我是 扬帆向海,这个昵称来源于我的名字以及女朋友的名字。我热爱技术、热爱开源、热爱编程。技术是开源的、知识是共享的。 这博客是对自己学习的一点点总结及记录,如果您对 Java、算法 感兴趣,可以关注我的动态,我们一起学习。 用知识改变命运,让我们的家人过上更好的生活。 目录一、杨辉三角的介绍二、杨辉三角的算法思想三、代码实现1.第一种写法2.第二种写法 一、杨辉三角的介绍 百度
腾讯算法面试题:64匹马8个跑道需要多少轮才能选出最快的四匹?
昨天,有网友私信我,说去阿里面试,彻底的被打击到了。问了为什么网上大量使用ThreadLocal的源码都会加上private static?他被难住了,因为他从来都没有考虑过这个问题。无独有偶,今天笔者又发现有网友吐槽了一道腾讯的面试题,我们一起来看看。 腾讯算法面试题:64匹马8个跑道需要多少轮才能选出最快的四匹? 在互联网职场论坛,一名程序员发帖求助到。二面腾讯,其中一个算法题:64匹
面试官:你连RESTful都不知道我怎么敢要你?
面试官:了解RESTful吗? 我:听说过。 面试官:那什么是RESTful? 我:就是用起来很规范,挺好的 面试官:是RESTful挺好的,还是自我感觉挺好的 我:都挺好的。 面试官:… 把门关上。 我:… 要干嘛?先关上再说。 面试官:我说出去把门关上。 我:what ?,夺门而去 文章目录01 前言02 RESTful的来源03 RESTful6大原则1. C-S架构2. 无状态3.统一的接
为啥国人偏爱Mybatis,而老外喜欢Hibernate/JPA呢?
关于SQL和ORM的争论,永远都不会终止,我也一直在思考这个问题。昨天又跟群里的小伙伴进行了一番讨论,感触还是有一些,于是就有了今天这篇文。 声明:本文不会下关于Mybatis和JPA两个持久层框架哪个更好这样的结论。只是摆事实,讲道理,所以,请各位看官勿喷。 一、事件起因 关于Mybatis和JPA孰优孰劣的问题,争论已经很多年了。一直也没有结论,毕竟每个人的喜好和习惯是大不相同的。我也看
SQL-小白最佳入门sql查询一
一 说明 如果是初学者,建议去网上寻找安装Mysql的文章安装,以及使用navicat连接数据库,以后的示例基本是使用mysql数据库管理系统; 二 准备前提 需要建立一张学生表,列分别是id,名称,年龄,学生信息;本示例中文章篇幅原因SQL注释略; 建表语句: CREATE TABLE `student` ( `id` int(11) NOT NULL AUTO_INCREMENT, `
项目中的if else太多了,该怎么重构?
介绍 最近跟着公司的大佬开发了一款IM系统,类似QQ和微信哈,就是聊天软件。我们有一部分业务逻辑是这样的 if (msgType = "文本") { // dosomething } else if(msgType = "图片") { // doshomething } else if(msgType = "视频") { // doshomething } else { // dosho
【图解经典算法题】如何用一行代码解决约瑟夫环问题
约瑟夫环问题算是很经典的题了,估计大家都听说过,然后我就在一次笔试中遇到了,下面我就用 3 种方法来详细讲解一下这道题,最后一种方法学了之后保证让你可以让你装逼。 问题描述:编号为 1-N 的 N 个士兵围坐在一起形成一个圆圈,从编号为 1 的士兵开始依次报数(1,2,3…这样依次报),数到 m 的 士兵会被杀死出列,之后的士兵再从 1 开始报数。直到最后剩下一士兵,求这个士兵的编号。 1、方
致 Python 初学者
文章目录1. 前言2. 明确学习目标,不急于求成,不好高骛远3. 在开始学习 Python 之前,你需要做一些准备2.1 Python 的各种发行版2.2 安装 Python2.3 选择一款趁手的开发工具3. 习惯使用IDLE,这是学习python最好的方式4. 严格遵从编码规范5. 代码的运行、调试5. 模块管理5.1 同时安装了py2/py35.2 使用Anaconda,或者通过IDE来安装模
“狗屁不通文章生成器”登顶GitHub热榜,分分钟写出万字形式主义大作
一、垃圾文字生成器介绍 最近在浏览GitHub的时候,发现了这样一个骨骼清奇的雷人项目,而且热度还特别高。 项目中文名:狗屁不通文章生成器 项目英文名:BullshitGenerator 根据作者的介绍,他是偶尔需要一些中文文字用于GUI开发时测试文本渲染,因此开发了这个废话生成器。但由于生成的废话实在是太过富于哲理,所以最近已经被小伙伴们给玩坏了。 他的文风可能是这样的: 你发现,
程序员:我终于知道post和get的区别
IT界知名的程序员曾说:对于那些月薪三万以下,自称IT工程师的码农们,其实我们从来没有把他们归为我们IT工程师的队伍。他们虽然总是以IT工程师自居,但只是他们一厢情愿罢了。 此话一出,不知激起了多少(码农)程序员的愤怒,却又无可奈何,于是码农问程序员。 码农:你知道get和post请求到底有什么区别? 程序员:你看这篇就知道了。 码农:你月薪三万了? 程序员:嗯。 码农:你是怎么做到的? 程序员:
《程序人生》系列-这个程序员只用了20行代码就拿了冠军
你知道的越多,你不知道的越多 点赞再看,养成习惯GitHub上已经开源https://github.com/JavaFamily,有一线大厂面试点脑图,欢迎Star和完善 前言 这一期不算《吊打面试官》系列的,所有没前言我直接开始。 絮叨 本来应该是没有这期的,看过我上期的小伙伴应该是知道的嘛,双十一比较忙嘛,要值班又要去帮忙拍摄年会的视频素材,还得搞个程序员一天的Vlog,还要写BU
加快推动区块链技术和产业创新发展,2019可信区块链峰会在京召开
      11月8日,由中国信息通信研究院、中国通信标准化协会、中国互联网协会、可信区块链推进计划联合主办,科技行者协办的2019可信区块链峰会将在北京悠唐皇冠假日酒店开幕。   区块链技术被认为是继蒸汽机、电力、互联网之后,下一代颠覆性的核心技术。如果说蒸汽机释放了人类的生产力,电力解决了人类基本的生活需求,互联网彻底改变了信息传递的方式,区块链作为构造信任的技术有重要的价值。   1
程序员把地府后台管理系统做出来了,还有3.0版本!12月7号最新消息:已在开发中有github地址
第一幕:缘起 听说阎王爷要做个生死簿后台管理系统,我们派去了一个程序员…… 996程序员做的梦: 第一场:团队招募 为了应对地府管理危机,阎王打算找“人”开发一套地府后台管理系统,于是就在地府总经办群中发了项目需求。 话说还是中国电信的信号好,地府都是满格,哈哈!!! 经常会有外行朋友问:看某网站做的不错,功能也简单,你帮忙做一下? 而这次,面对这样的需求,这个程序员
网易云6亿用户音乐推荐算法
网易云音乐是音乐爱好者的集聚地,云音乐推荐系统致力于通过 AI 算法的落地,实现用户千人千面的个性化推荐,为用户带来不一样的听歌体验。 本次分享重点介绍 AI 算法在音乐推荐中的应用实践,以及在算法落地过程中遇到的挑战和解决方案。 将从如下两个部分展开: AI 算法在音乐推荐中的应用 音乐场景下的 AI 思考 从 2013 年 4 月正式上线至今,网易云音乐平台持续提供着:乐屏社区、UGC
【技巧总结】位运算装逼指南
位算法的效率有多快我就不说,不信你可以去用 10 亿个数据模拟一下,今天给大家讲一讲位运算的一些经典例子。不过,最重要的不是看懂了这些例子就好,而是要在以后多去运用位运算这些技巧,当然,采用位运算,也是可以装逼的,不信,你往下看。我会从最简单的讲起,一道比一道难度递增,不过居然是讲技巧,那么也不会太难,相信你分分钟看懂。 判断奇偶数 判断一个数是基于还是偶数,相信很多人都做过,一般的做法的代码如下
日均350000亿接入量,腾讯TubeMQ性能超过Kafka
整理 | 夕颜出品 | AI科技大本营(ID:rgznai100) 【导读】近日,腾讯开源动作不断,相继开源了分布式消息中间件TubeMQ,基于最主流的 OpenJDK8开发的
8年经验面试官详解 Java 面试秘诀
    作者 | 胡书敏 责编 | 刘静 出品 | CSDN(ID:CSDNnews) 本人目前在一家知名外企担任架构师,而且最近八年来,在多家外企和互联网公司担任Java技术面试官,前后累计面试了有两三百位候选人。在本文里,就将结合本人的面试经验,针对Java初学者、Java初级开发和Java开发,给出若干准备简历和准备面试的建议。   Java程序员准备和投递简历的实
面试官如何考察你的思维方式?
1.两种思维方式在求职面试中,经常会考察这种问题:北京有多少量特斯拉汽车? 某胡同口的煎饼摊一年能卖出多少个煎饼? 深圳有多少个产品经理? 一辆公交车里能装下多少个乒乓球? 一
相关热词 c#处理浮点数 c# 生成字母数字随机数 c# 动态曲线 控件 c# oracle 开发 c#选择字体大小的控件 c# usb 批量传输 c#10进制转8进制 c#转base64 c# 科学计算 c#下拉列表获取串口
立即提问