html - Java Spring:如何将十六进制格式的 HTML 字符代码从 textarea 转换为纯文本?
问题描述
我有用 React JS 和 Java Spring boot 编写的 Web 应用程序。在我的板组件中,我有带有 textarea 和按钮的表单。在单击按钮时进行调试时,我将重定向到 UserController spring 项目中的 PostMapping。我的方法有一个参数。这是@RequestBody 字符串查询。我以十六进制代码的 HTML 字符代码从 textarea 获取文本。我需要从此字符串中提取纯文本。
我得到的东西看起来像这样:
CREATE+TABLE+用户+%28%0A%09id+INT%2C%0A%09fullName+VARCHAR%28220%29+NOT+NULL%2C%0A%09city+VARCHAR%28120%29+NOT+NULL%2C%0A% 09country+VARCHAR%2860%29+NOT+NULL%2C%0A%09PRIMARY+KEY%28id%29%0A%29%3 ...
其中 + 确实意味着空间
我试图解决这个问题。没有任何效果。
第一种方式:
byte[] s = DatatypeConverter.parseHexBinary(query);
System.out.println(new String(s, "UTF-8"));
第二种方式:Apache Commons Codec - Hex
byte[] bytes = Hex.decodeHex(query.toCharArray());
System.out.println(new String(bytes, "UTF-8"));
这是我的代码
春季项目:
用户控制器类
@Controller
@RequestMapping("fiddle")
public class MainController {
@PostMapping
public ResponseEntity<?> processingQueries(@RequestBody String query) {
System.out.println(query);
return new ResponseEntity<String>("Query prcessed successfully.", HttpStatus.OK);
}
}
反应 JS 项目:
板组件
import React from 'react';
import TableButton from './TableButton';
import { connect } from 'react-redux';
import PropTypes from 'prop-types';
import { processQueries } from '../actions/queryActions';
class Board extends React.Component {
constructor() {
super();
this.state = {
query: 'Write here your SQL query...'
}
this.onChange = this.onChange.bind(this);
this.resetField = this.resetField.bind(this);
this.onSubmitRun = this.onSubmitRun.bind(this);
}
onChange(e) {
this.setState({ [e.target.name]: e.target.value });
}
resetField(e) {
this.setState({ query: '' });
}
onSubmitRun(e) {
e.preventDefault();
console.log(this.state.query);
this.props.processQueries(this.state.query, this.props.history);
}
render() {
return (
<div className="box flex-stretch">
<div className="blue smallClass">
<TableButton />
</div>
<div className="mediumClass">
<form onSubmit={this.onSubmitRun}>
<textarea
name="query"
className="txtArea"
value={this.state.query}
onChange={this.onChange}
onClick={this.resetField}
rows="27"
>
Write here your SQL queries...
</textarea>
<input type="submit" value="Run" className="runButton"/>
</form>
</div>
<div className="red largeClass">
One of three columns
</div>
</div>
);
}
}
Board.propTypes = {
query: PropTypes.string
}
const mapStateToProps = state => ({
query: state.query
})
export default connect(mapStateToProps, { processQueries })(Board);
查询减速器
import { PROCESS_QUERY } from '../actions/types';
const initialState = {
query: ''
}
export default function(state = initialState, action) {
switch(action.type) {
case PROCESS_QUERY:
return {
...state,
query: action.payload
}
default:
return state;
}
}
查询操作
import axios from 'axios';
import { GET_ERRORS, PROCESS_QUERY } from './types';
export const processQueries = (query, history) => async dispatch =>
{
try {
console.log(query);
await axios.post("/fiddle", query);
history.push("/fiddle");
dispatch({
type: PROCESS_QUERY,
payload: ''
})
} catch(error) {
dispatch({
type: GET_ERRORS,
payload: error.response.data
})
}
}
我需要将此字符串从 textarea 转换为纯文本。插入到 textarea 的数据是计划 SQL 查询。
解决方案
所有你需要用UrlDecoder
.
String result = java.net.URLDecoder.decode(query, StandardCharsets.UTF_8.displayName());
推荐阅读
- javascript - 当前与 JS ES6 的活动链接
- sql - Rails Postgres 查询,仅选择出现在所有搜索参数中的具有关联的项目
- python - ImportError:没有名为 win32api 的模块错误
- django - 如何保存表单信息以使其显示在管理站点面板中?
- excel - 如何同步工作簿中的所有 Textbox1?
- android - java.lang.UnsatisfiedLinkError:dlopen 失败:找不到库“/Users/...”
- bash - 读取包含空格的输入
- angular - 使用 Material Dialog 对组件进行的 Angular 单元测试未初始化
- html - 如何保持主选项卡上的悬停状态但不让它影响我的子选项卡?
- javascript - Flask - 条纹元素“400 错误请求:CSRF 令牌丢失或不正确”